马化腾先生在内部工作会议上对此也极为称道。本人很感兴趣,近期对其进行了研究,目前已经完成开发并上线开始试用。
本人完成的系统界面如下,用html、css、js模拟上传效果:
腾讯qqmail大附件上传分为两种方式:
第一种通过标准的html中<input type="file">控件上传。
第二种通过activex控件上传。
第一种通过标准的html中<input type="file">控件上传。
第二种通过activex控件上传。
为什么不完全使用activex控件呢?
答案是:某些浏览器不支持activex,比如firefox,只能按照标准组件上传(当然也可以开发插件,但与IE的机制完全不同)。另外,IE的安全级别提高后也可能屏蔽activx。
通过activex控件上传有什么好处呢?
答案是:activex可以实现断点续传,而且可以实时显示上传进度,用户体验好。
答案是:某些浏览器不支持activex,比如firefox,只能按照标准组件上传(当然也可以开发插件,但与IE的机制完全不同)。另外,IE的安全级别提高后也可能屏蔽activx。
通过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
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。为什么设定这个尺寸的,感觉有两种可能性:
第一种:鼓励用户使用 activex方式。
第二种:功力不够,或者开发者有偷懒的嫌疑,这一点大家不要迷信,其实他们也跟咱没什么两样,程序员只要能交活就行了,没必要加工作量,
其实从马虎腾的工作报告中也能感受到这一点,他也挺看不过去的。当然老板是老板的心态,公司毕竟是人家自己的。
笔者也做了两种方式,其中不通过activex控件上传文件的方式最大支持1G,给qq mail补上。activex控件的方式跟qqmail类似,在后续的文章中详述。
下一篇介绍 非activex方式的原理和实现,请各位关注。
第一种:鼓励用户使用 activex方式。
第二种:功力不够,或者开发者有偷懒的嫌疑,这一点大家不要迷信,其实他们也跟咱没什么两样,程序员只要能交活就行了,没必要加工作量,
其实从马虎腾的工作报告中也能感受到这一点,他也挺看不过去的。当然老板是老板的心态,公司毕竟是人家自己的。
笔者也做了两种方式,其中不通过activex控件上传文件的方式最大支持1G,给qq mail补上。activex控件的方式跟qqmail类似,在后续的文章中详述。
下一篇介绍 非activex方式的原理和实现,请各位关注。