如何上传大文件(原创)

我是网易邮箱的忠实用户,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.14110 support 5.188.211.16 2018-05-12 23:51

nyl2s2 https://www.genericpharmacydrug.com

no.10274 imsd713o 188.143.234.155 2016-06-08 14:21

Branliilce for free; your parents must be a sweetheart and a certified genius.

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

前天刚用QQmail传了个600多M的东西,断点续传很不错啊,哈哈

no.1152 hustmayonghui 124.207.205.1 2009-11-13 10:08

其实现在都在使用flash来做这个了 swfupload
fangzi 2009-11-13 22:26

swfupload确实是不错的插件,可实现良好的用户体验,但是对与大文件,毕竟不能分包上传,也就谈不上断点续传了,具体看应用吧!

发表评论:

邮箱: