Zen Space
php erlang javascript ruby python web linux mac os x
rss
email
twitter
facebook
  • Labs
  • Resume
  • Works
  • About

Archive for the ‘未分类’ Category

让你的网站也像Gmail一样支持文件拖放上传-HTML5之File API

10 comments
Posted on 四 25 2010 by reeze

如果你比较好奇,可以先从这里下载所有代码,也可以点击这里查看chrome下上传的demo,点这里查看firefox下的demo
前不久Gmail推出了支持拖拽的附件上传功能,试用了下还真不错,其实很久以前就在想能有直接拖拽附件的功能,多亏有了HTML5,Web应用越来越像客户端的应用了。
在好奇心驱使下,想了解一下Gmail到底是怎么做到的,了解了一下最新的HTML5 File API草案,这个接口主要提供的就是提供对文件对象的访问,别想歪了,这个接口是无法随意的访问系统里的文件的。他能做的就是访问<input type=”file” />标签里所选择的文件,这些文件可以通过用户手动选择,或者是HTML5的拖放接口选中的文件。有兴趣的童鞋可以看看这个规范,还算比较简单。
下面简单看看接口定义几个对象。
FileList、File对象。
在HTML5中的<input type=”file” />标签中增加了mutilple属性,允许进行多文件选择。大家应该都知道一般上传标签中是不允许选择多个文件的。 新增的这个属性就是允许进行多个文件的选择(这个在桌面应用中也很常见)。<input type=”file” multiple=”multiple” id=”file” />
下面是在Firebug中的输出
12345>>> var f = document.getElementById("file")
>>> f.files
FileList0=File length=1 // 选中的文件数量
>>> f.files[0]
FilefileName=es.dll fileSize=271360
FileList对象就是用户选择的所有文件的对象表示,如果是通过input标签选择的,就可以通过上面代码所示的方法进行访问,File对象就可以刚才选择的某个文件的信息,如上面的代码所示,主要可以得到所选中的文件名以及文件大小信息。
你可能在想只能得到这些信息到底有什么用呢?都没有办法读取文件内容,这就得提到规范中的FileReader接口了,这个接口就是用来读取File对象文件的。
在File API规范中提到File API主要是和其他的接口协同合作。比如XMLHttpRequest (这个新接口支持通过xhr的send()方法发送File对象), DataTransfer(也就是HTML5中的拖拽接口 ), 以及Web Worksers(这个主要是异步脚本执行,相当于给JS提供了“多线程”脚本执行能力,并且支持通过postMessage()进行“线程间通信”),感兴趣的,可以看看这篇日志,以及这篇。
目前能实现这样的效果的方式主要有如下几种:

Gmail中提到的这两个浏览器都支持拖放接口,托放以后可以直接通过托放事件的DataTransfer属性访问到本次托放是关联的文件对象列表FileList,然后通过XMLHttpRequest的send方法将File对象发送到服务器
在Chrome下支持直接将文件拖放到文件选择控件上,就相当于直接选择了文件。这时可以通过<input type=”file” />DOM对象的files属性访问到被托放进来的文件列表对象,然后也可以通过Ajax将文件对象发送到服务器,通过将文件选择控件透明度降低也可以实现Gmail类似的效果。 在Chrome因为可以直接通过托拽的方式让文件选择控件“赋值”,此时也可以通过一个iframe加表单的方式将数据发送到服务器。
在Firefox3.6下可以通过FileReader直接读取到文件的内容,然后直接将文件内容发送到服务器端(可以参考这个例子,这是个不完整的例子,直接浏览是看不到效果的,查看源代码你就会懂的。)

下面就来看看Gmail到底是怎么做到的吧。
本来想通过Firebug的概况功能来捕捉到在托拽期间的脚本执行情况,比如:

但是脚本执行里压根没有找到ajax相关的函数调用,可能是因为firebug还不支持监控页面里嵌入的iframe中的脚本执行跟踪,这也说明本次上传肯定是在某个iframe中完成的。,那就直接监听网络吧,托拽上传一个附件时查看网络情况,发现附件是通过下面的ajax post过去的:

大家注意看,是通过ajax post方式将附件POST到服务器的,

可以看出Gmail在firefox下不是通过表单直接提交实现的。在chrome下的开发人员工具有点简单,无法看到网络情况,我也懒的再去抓包看了,估计是使用透明<input type=”file” />+ajax方式实现的。
在Gmail支持托拽的声明中提到目前只支持Chrome 2+以及FireFox3.6+。虽然这两个浏览器都支持HTML5,但是对于所有规范的支持程度都是不一样的,并且规范也还不是正式规范。在Firefox3.6的release note中提到:
Support for new DOM and HTML5 specifications including the Drag & Drop API and the File API, [...]


Read More

  Tags: File API, Gmail, HTML5, 托放上传 Category: HTML5, 未分类

开启Mac OS X Snow Leopard的NTFS原生读写

no comments
Posted on 一 24 2010 by reeze

在Mac OS X下一直使用MacFUSE和NTFS-3G来访问ntfs分区,这次装了Snow leopard 10.6.2之后出现fusefs.kext can’t load的错误,从官方得知目前macfuse在snow leopard下有问题,在网上看到这篇贴子提到Snow Leopard其实原生就支持NTFS分区的读写,真是个好消息。
开启的方法有两种:
一种是在/etc/fstab文件里增加挂载选项,基本步骤是:
1,卸载NTFS-3G或者其他读写ntfs分区的软件
2,打开终端$ diskutil info /Volumes/分区名 或者使用磁盘工具获得分区的UUID
3,编辑/etc/fstab文件,增加一行 UUID=分区的UUID none ntfs rw
4,如果还有其他的分区要挂载,则继续上面的步骤2-3增加其他分区
这种方式比较烦琐,第二种方法就比较简单。
大家应该都注意过系统已启动就会自动挂载所有的ntfs分区,这个命令在/sbin/mount_ntfs
这个方法所要做的就是给这个默认的挂载命令增加可读写参数,按如下步骤在终端命令行操作:
$ sudo mv /sbin/mount_ntfs /sbin/mount_ntfs.orig
$ sudo vim /sbin/mount_ntfs
编辑这个文件,加入如下内容:
#!/bin/sh
/sbin/mount_ntfs.orig -o rw “$@“ #这里调用默认的挂载命令,不过增加了 rw参数,开启读写
保存这个文件,然后:
$ sudo chown root:wheel /sbin/mount_ntfs
$ sudo chmod 755 /sbin/mount_ntfs
然后重启,启动后,你应该就能得到一个可以自由读写的ntfs分区了。不过声明一点,这个功能据说不稳定,不知道是因为版权原因还是真的很不稳定,苹果默认没有开启这个功能。不过我更相信苹果。
========
后话:刚好公司配了一台Dell E6400,偶尔看到有人在上面装了一个Leopard,于是手痒也在上面装了一个,如果有人也有这台笔记本也可以试试看,不过我装好的系统还是有问题:
1,触摸屏一碰就乱跑,我直接禁用就好了,反正也不喜欢用。
2,关机和重启不断电,每天关机的次数也有限,也就无所谓了。
3,声音控制不了,只能在具体的应用程序里控制。
其实问题还是挺多的,不过基本上的使用我觉得还是没什么问题的,触摸屏的问题比较烦人,还好我不喜欢用触摸屏。如果有人也想尝试可以试试看。我用的安装文件是 Snow_Leopard_10.6.1-10.6.2_SSE2_SSE3_Intel_AMD_by_Hazard.iso, 至于安装方法PCbeta上有很多的教程可以参考,摸索一下大概都没有什么问题,安装的时候一定要做好备份,因为我到目前已经因为装Mac OS X丢失了不下10次数据了,大部分情况下都是分区被合并。所以一定要小心一点。


Read More

  Tags: MacFUSE, NTFS, OS X, Snow Leopard Category: Hackintosh, Mac, 未分类

在2009的尾巴上

1 comment
Posted on 十二 31 2009 by reeze

09年最后一篇日志,充个数吧:)
哈哈,刚买了本《Orange S: 一个操作系统的实现》,这一年下来买了挺多的书,也从图书馆借了很多的书(马上就要毕业了,再也享受不到学校图书馆丰富及时的藏书了,计划以后每个月发工资都买一本自己喜欢的书),发现我读书最大的问题是多而不精,拿一本好书就使劲的翻,很多书都是花几天就翻完了,但是读下来之后总觉得收获不够,一些很需要实践的部分也没有及时联系,总感觉自己浮在表面上,只知其然。所以呢,这个2010年争取多读好书,踏踏实实的啃几本好书,然后就是要多动手啦。
计划2010年呢,能把耽搁很久的想法付诸行动,做出点东西来。希望有个好的开始吧!
Happy New Year!!!


Read More

  Tags: 2009

支持IPv6的Tunnelblick For Mac OS X OpenVPN客户端

1 comment
Posted on 十二 30 2009 by reeze

在yegle那里买了OpenVPN服务 ,用着还挺不错,我也在教育网,所以只能使用支持IPv6版的客户端,openvpn默认不支持IPv6,不过yegle提供了相应的IPv6补丁,在Linux下以及Windows下使用的都挺好,最近又在折腾电脑,装了个Snow Leopard,基本没什么问题了,除了我的ATI 2600 XT硬件加速暂时无解外其他的都挺爽,使用了yegle推荐的Tunnelblick, 总是连接不上,它提示让我查看日志,但是根本就找不到地方看日志,直接cd 到 Tunnelblick的包里面直接执行openvpn命令,提示不支持udp6 ,又是不支持 Ipv6,本想直接自己编译一个openvpn,但是想想那样就太不clean了,编译成app的话可以通用,还能共享给有需要的人多好啊,去google code checkout了一份代码,直接编译,错误百出,我是在Snow Leopard上编译的,仔细查看原来需要MacOSX10.4u的SDK 重新安装10.4的SDK还是未果,后来发现SDK的安装目录居然不一样。。自己手动拷贝过去也不行。。 切换到傲Leopard下安装,折腾了好久终于编译成功,废话太多了。呵呵,共享出来给需要的人吧:)
猛击这个连接 下载http://code.google.com/p/tunnelblick-ipv6/downloads/list
可惜的是yegle不再提供IPv6用户的续费了,不过我到期之后差不多也要从学校滚蛋了。
我提供的这个版本的tunnelblick的配置文件位置是 ~/Library/openvpn 最新版的配置放在 ~/Library/Application Support/Tunnelblick/Configuration目录里面。
马上2009年就要过去了。最近很久都没有更新日志了,其实之间也想写一些东西,但是都丢在草稿箱里没写完。论文还有很多没有写完,马上就要交了,要抵制住诱惑乖乖写论文。


Read More

  Tags: MacOSX, Tools, VPN Category: Mac, 未分类

Lockerz邀请

6 comments
Posted on 十二 5 2009 by reeze

刚上论坛发现Locker这个好玩的东西
Lockerz (http://www.lockerz.com/)是一个新型态的网站,它成立于09年3月,由美国最大的媒体公司之一美国有线电视公司Liberty Media投资建立,目标是整合影音、游戏、购物等多项服务。 网站为免费注册,但是现阶段只有被邀请的人才可以注册。
Lockerz怎么玩儿?
lockerz的积分点数叫做PTZ,好吧,你可以把它理解为何Q币是一类的东西
使用者只要每天登入(2PTZ) 、回答当日的问题(2PTZ以上,有时会加倍放送)
或邀请朋友加入(2PTZ) ,就可以赚取积分点数
这些点数是可以拿来换一些不错的东西,
例如Apple MacBook、Ipod nano、Ipodshuffle,甚至还有motocycle
依奖品本身价值,换取点数也不同。
目前2PTZ大约可以换取相当于1美金的东西,
例如旧版ipod shuffle(价值$50)100PTZ、ipodnano(价值$150)300PTZ等,
所以奖品并不难换。
刚加入的使用者,
会让你玩一个接方块的游戏,等于白送你美元的
在限定时间内,方块会一直掉下来,价值1PTZ至3PTZ,方块越小越值钱!
另外右下角还有一个DAILIES按钮,
点进去可以回答当日的问题。
每天都是一题随便可以回答的问题,
回答完就可以拿2~10PTZ。
更多的服务和功能还在完善之中……
如何加入Lockerz?
目前Lockerz只有通过邀请才能加入。需要的同学可以在下面留言,留下你的Email,目前已知QQ邮箱接收到邀请最快。
或者可以直接用留言时填写的Email。长时间没有收到的请告诉我一声,我会重新发送。
另外,邀请函有可能在你的垃圾邮件里。
接收到邀请的同学注册后可以再邀请他人,每邀请1位朋友可以获得2个PTZ,这也是获得PTZ的一种方式。
来看段视频吧:


Read More

最近文章

  • 解决Mac下终端中使用screen管理回话但看不到滚动条等问题
  • 让你的网站也像Gmail一样支持文件拖放上传-HTML5之File API
  • 开启Mac OS X Snow Leopard的NTFS原生读写
  • 在2009的尾巴上
  • 支持IPv6的Tunnelblick For Mac OS X OpenVPN客户端

分类目录

  • G-related (1)
  • Hackintosh (1)
  • HTML5 (1)
  • JavaScript (1)
  • Mac (5)
  • PHP (5)
  • tips (1)
  • 乱78糟 (1)
  • 未分类 (5)

标签~云

2009 debug editor exception File API Gmail html HTML5 JavaScript linux Mac MacFUSE MacOSX NTFS OS X PHP screen screenrc Snow Leopard softwares ssh syntax check Tools VPN 托放上传

一些脚印

  • L42y 在 Lockerz邀请 上的评论
  • cloudshadow 在 Lockerz邀请 上的评论
  • reeze 在 让你的网站也像Gmail一样支持文件拖放上传-HTML5之File API 上的评论
  • bin 在 让你的网站也像Gmail一样支持文件拖放上传-HTML5之File API 上的评论
  • jumkey 在 让你的网站也像Gmail一样支持文件拖放上传-HTML5之File API 上的评论

Google Reader

  • 且听疯吟 » 如果爆炸不会骗人,那么是谁在说谎? (FeedzShare)
  • 无敌猫咪强大字幕组图(23P) (FeedzShare)
  • 南京城北化工厂爆炸,幸存者在人人上的日志…… http://sinaurl.cn/Gx9NZ (玩聚SR|最新)
  • 北韩政府官方网站那是很强强强强强强强强强强强大 (Initiative)
  • 强拆下的悲剧——村长许坤被施酷刑 (政府丑闻)
Shared Items

日志存档

  • 2010年七月 (1)
  • 2010年四月 (1)
  • 2010年一月 (1)
  • 2009年十二月 (3)
  • 2009年十月 (2)
  • 2009年七月 (4)
  • 2009年六月 (4)

链接表

  • Ideawu
  • LinuxToy
  • on Github
  • Tina的设计天地
  • 风雪之隅
想读
乐者为王
Pro Python System Administration
C专家编程
把妹达人-從宅男到型男之路
C语言程序设计:现代方法(第2版)
正读
建筑的永恒之道
亲密行为
裸猿三部曲:人类动物园
裸猿三部曲:裸猿
Clean Code
读过
我的奋斗
无懈可击的Web设计
应用Rails进行敏捷Web开发
追风筝的人
构建可扩展的Web站点

  • Resume
  • Works
  • About
Powered by Wordpress  |  Designed by WebTreats