如何上传大文件(原创)
我是网易邮箱的忠实用户,5年了。但前段时间需要给朋友发送一封超大邮件,不得不改用了QQ mail,QQ mail 的用户体验做得很好。腾讯QQ mail 大附件上传分为两种方式:
第一种通过标准的html中<input type="file">控件上传。
第二种通过activex控件上传。
为什么不完全使用activex控件呢?
答案是:某些浏览器不支持activex,比如firefox,只能按照标准组件上传(当然也可以开发插件,但与IE的机制完全不同)。另外,IE的安全级别提高后也可能屏蔽activex。
通过activex控件上传有什么好处呢?
答案是:activex可以实现断点续传,而且可以实时显示上传进度,用户体验好。
activex实现断点续传的原理也非常简单:先通过activex(可以操作本地文件,突破安全性)将大文件进行按照一定的尺寸切片,然后逐片上传,最后由服务器对文件片拼接为完整的文件。
笔者通过sniffer抓包程序,跟踪qq大附件上传的过程,结果如下:
QQ mail先将文件进行扫描,生成摘要md5(为了保证文件的完整性),然后按照每片128K大小,模拟标准的Html的Post方式上传数据,每一份数据的开头都放置了有关文件的基本信息和断点信息。
sniffer抓到的Post数据头如下:
POST /ftn_handler HTTP/1.1
Accept: */*
User-Agent: TXFTNActiveX
Host: 124.89.102.10
Content-Length: 131428
Connection: Keep-Alive
Cache-Control: no-cache
将User-Agent头数据改为自己的标识,其它数据都还算标准。QQ mail不使用activex控件上传文件的方式是使用了标准的webserver的功能,最大支持15M。

最新评论:
no.1790 lelouch.lal 122.224.234.15 2010-09-17 17:49
no.1761 346196841 111.173.247.98 2010-09-03 09:30
no.1296 net.tink 125.66.135.150 2010-01-05 03:14
no.1152 hustmayonghui 124.207.205.1 2009-11-13 10:08
swfupload确实是不错的插件,可实现良好的用户体验,但是对与大文件,毕竟不能分包上传,也就谈不上断点续传了,具体看应用吧!