• 超越QQ Mail文件中转站大文件上传设计思路和实践(一) 原创 王泽宾


    笔者近来一直研究邮件系统,其中感觉QQ邮箱的大附件功能(也叫文件中转站)非常不错,腾讯也自称是同类产品中用户体验最好。
        马化腾先生在内部工作会议上对此也极为称道。本人很感兴趣,近期对其进行了研究,目前已经完成开发并上线开始试用。
        本人完成的系统界面如下,用html、css、js模拟上传效果:
        
       
     
        腾讯qqmail大附件上传分为两种方式:
        第一种通过标准的html中<input type="file">控件上传。
        第二种通过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
        将User-Agent头数据改为自己的标识,其它数据都还算标准。
       QQ mail不使用activex控件上传文件的方式:是使用了标准的webserver的功能,最大支持15M。为什么设定这个尺寸的,感觉有两种可能性:
        第一种:鼓励用户使用 activex方式。
        第二种:功力不够,或者开发者有偷懒的嫌疑,这一点大家不要迷信,其实他们也跟咱没什么两样,程序员只要能交活就行了,没必要加工作量,
    其实从马虎腾的工作报告中也能感受到这一点,他也挺看不过去的。当然老板是老板的心态,公司毕竟是人家自己的。
         笔者也做了两种方式,其中不通过activex控件上传文件的方式最大支持1G,给qq mail补上。activex控件的方式跟qqmail类似,在后续的文章中详述。
      下一篇介绍 非activex方式的原理和实现,请各位关注。 
  • 相关阅读:
    Interview with BOA
    Java Main Differences between HashMap HashTable and ConcurrentHashMap
    Java Main Differences between Java and C++
    LeetCode 33. Search in Rotated Sorted Array
    LeetCode 154. Find Minimum in Rotated Sorted Array II
    LeetCode 153. Find Minimum in Rotated Sorted Array
    LeetCode 75. Sort Colors
    LeetCode 31. Next Permutation
    LeetCode 60. Permutation Sequence
    LeetCode 216. Combination Sum III
  • 原文地址:https://www.cnblogs.com/wanghao72214/p/1382128.html
Copyright © 2020-2023  润新知