笔者近来一直研究邮件系统,其中感觉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方式的原理和实现,请各位关注。

超越QQ Mail文件中转站---大文件上传设计思路和实践 原创 王泽宾相关推荐

  1. 微信文件过大不能上传?学会这几种方法,再大文件也能轻松发

    微信文件过大不能上传?学会这几种方法,再大文件也能轻松发 微信已经逐渐成为办公必须,但微信不支持大文件的发送,那么遇到这种情况,很多小伙伴都会选择用QQ,其实微信也能发送大文件,只要方法用对,下面就来 ...

  2. pdf文件太大无法上传怎么办?

    我们在工作和学习中经常需要通过网站/APP等上传PDF文件,相信大部分人都遇到过,由于为了缓解服务器的压力,很多网站都会限制PDF的大小,例如大于10M的PDF文件不能上传等,这时候我们该怎么办呢?我 ...

  3. 由QQ文件中转站超快速上传联想到

    今天向QQ文件中转站上传了两个文件,一个30M,一个60M,都发现上传时间仅为1s, 猜想了一下,这里应该是有算法的,如果服务器上以及同样的文件了,就不需要用户再上传,而是直接给出文件链接,这样既减轻 ...

  4. java上传过大图片超时_解决.net项目中上传的图片或者文件太大无法上传问题

    最近做项目的时候  用户提出要上传大图片  一张图片有可能十几兆  本来用的第三方的上传控件  有限制图片上传大小的设置 以前设置的是2M  按照用户的要求  以为直接将限制图片上传大小的设置改下就可 ...

  5. 当因为上传文件过大导致上传失败时

    <httpRuntime targetFramework="4.6" appRequestQueueLimit="100" executionTimeou ...

  6. 大视频上传服务器,支持HTML5断点续传,支持4GB以上大视频文件上传

    当前,我们正处于一个视频爆炸的时代,高清智能手机人人都有,各种场景下的视频应用越来越多,4K高清视频正在普及,视频文件尺寸动辄几个GB.当我们需要和他人分享这些大视频时,视频的上传和断点续传文件立马出 ...

  7. 求大师点化,寻求大文件(最大20G左右)上传方案

    之前仿造uploadify写了一个HTML5版的文件上传插件,没看过的朋友可以点此先看一下~得到了不少朋友的好评,我自己也用在了项目中,不论是用户头像上传,还是各种媒体文件的上传,以及各种个性的业务需 ...

  8. formdata上传文件_大文件分片断点上传实现思路以及方案

    作者:yeyan1996| 来源:掘金https://juejin.im/post/5dff8a26e51d4558105420ed 前言 我在面试的时候确实被问到了这个问题,而且是一道在线 codi ...

  9. Gitlab上传代码时报错文件太大无法上传

    1.查看报错截图 Delta compression using up to 8 threads Total 19 (delta 13), reused 7 (delta 7), pack-reuse ...

  10. python requests上传大文件_pythonrequestspost大文件和获取进度条

    问题: python requests post 大文件和获取进度条 描述: 准备用HTTP 在局域网内 上传一些文件,文件一般都在1G左右r = requests.post('****', data ...

最新文章

  1. 北斗导航 | 从存储的log日志(NMEA0183标准输出)中获取经纬度并在地图中绘制坐标轨迹(附Matlab源代码)
  2. 【java学习笔记】浅析JavaWeb开发中Model1模式和Model2模式
  3. Flume 中文入门手冊
  4. 前端学习(2478):请求提交
  5. Apollo进阶课程㉗丨Apollo控制技术详解——控制理论
  6. 测试集没标签,可以拿来测模型吗?
  7. 1002 C语言输入解决方案
  8. 摄像头 保存到外网服务器_直播平台搭建千万不要忽略流媒体服务器的存在
  9. codeforces C. Sonya and Problem Wihtout a Legend(dp or 思维)
  10. 将指定文件中的空格或换行删除(可选是否创建一个新文件)
  11. excel常用函数大全及示例(一)
  12. php敏感代码屏蔽,PHP敏感词汇屏蔽或替换
  13. matlab中 不是3和7倍数,从1到100的所有自然数中,不是3也不是7的倍数的数有多少个?...
  14. 嵌入式Linux设备驱动程序开发指南18(IIO子系统(二)具有硬件触发功能的IIO子系统ADC模块)——读书笔记
  15. Rivian-电动皮卡先行者
  16. java中什么是空指针异常_JAVA中的空指针异常如何处理?
  17. 【译】将字符转换为双精度浮点型
  18. LTE学习:PHICH(二)
  19. Vue+element 实现英雄榜功能
  20. 谷歌索引量查询,批量查询网站在谷歌RR权重值

热门文章

  1. python视频培训班
  2. markdown 表格代码在线生成工具
  3. ubuntu18.04安装lua5.3.6和luarocks3.8
  4. ocata版本vlan模式配置【ovs】
  5. 华三Track+NQA+静态路由配置实例
  6. esp8266电池供电方案_普通照明、应急照明、事故照明系统的9种设计方案解读,收藏好!...
  7. 智慧交通规划设计方案解析
  8. 使用html链接上传木马,一段植入木马的html代码
  9. 天涯怎么引流到qq?天涯社区如何靠发帖子引流?
  10. JAVA图书馆管理系统各个项目链接