超越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方式的原理和实现,请各位关注。
超越QQ Mail文件中转站---大文件上传设计思路和实践 原创 王泽宾相关推荐
- 微信文件过大不能上传?学会这几种方法,再大文件也能轻松发
微信文件过大不能上传?学会这几种方法,再大文件也能轻松发 微信已经逐渐成为办公必须,但微信不支持大文件的发送,那么遇到这种情况,很多小伙伴都会选择用QQ,其实微信也能发送大文件,只要方法用对,下面就来 ...
- pdf文件太大无法上传怎么办?
我们在工作和学习中经常需要通过网站/APP等上传PDF文件,相信大部分人都遇到过,由于为了缓解服务器的压力,很多网站都会限制PDF的大小,例如大于10M的PDF文件不能上传等,这时候我们该怎么办呢?我 ...
- 由QQ文件中转站超快速上传联想到
今天向QQ文件中转站上传了两个文件,一个30M,一个60M,都发现上传时间仅为1s, 猜想了一下,这里应该是有算法的,如果服务器上以及同样的文件了,就不需要用户再上传,而是直接给出文件链接,这样既减轻 ...
- java上传过大图片超时_解决.net项目中上传的图片或者文件太大无法上传问题
最近做项目的时候 用户提出要上传大图片 一张图片有可能十几兆 本来用的第三方的上传控件 有限制图片上传大小的设置 以前设置的是2M 按照用户的要求 以为直接将限制图片上传大小的设置改下就可 ...
- 当因为上传文件过大导致上传失败时
<httpRuntime targetFramework="4.6" appRequestQueueLimit="100" executionTimeou ...
- 大视频上传服务器,支持HTML5断点续传,支持4GB以上大视频文件上传
当前,我们正处于一个视频爆炸的时代,高清智能手机人人都有,各种场景下的视频应用越来越多,4K高清视频正在普及,视频文件尺寸动辄几个GB.当我们需要和他人分享这些大视频时,视频的上传和断点续传文件立马出 ...
- 求大师点化,寻求大文件(最大20G左右)上传方案
之前仿造uploadify写了一个HTML5版的文件上传插件,没看过的朋友可以点此先看一下~得到了不少朋友的好评,我自己也用在了项目中,不论是用户头像上传,还是各种媒体文件的上传,以及各种个性的业务需 ...
- formdata上传文件_大文件分片断点上传实现思路以及方案
作者:yeyan1996| 来源:掘金https://juejin.im/post/5dff8a26e51d4558105420ed 前言 我在面试的时候确实被问到了这个问题,而且是一道在线 codi ...
- Gitlab上传代码时报错文件太大无法上传
1.查看报错截图 Delta compression using up to 8 threads Total 19 (delta 13), reused 7 (delta 7), pack-reuse ...
- python requests上传大文件_pythonrequestspost大文件和获取进度条
问题: python requests post 大文件和获取进度条 描述: 准备用HTTP 在局域网内 上传一些文件,文件一般都在1G左右r = requests.post('****', data ...
最新文章
- 北斗导航 | 从存储的log日志(NMEA0183标准输出)中获取经纬度并在地图中绘制坐标轨迹(附Matlab源代码)
- 【java学习笔记】浅析JavaWeb开发中Model1模式和Model2模式
- Flume 中文入门手冊
- 前端学习(2478):请求提交
- Apollo进阶课程㉗丨Apollo控制技术详解——控制理论
- 测试集没标签,可以拿来测模型吗?
- 1002 C语言输入解决方案
- 摄像头 保存到外网服务器_直播平台搭建千万不要忽略流媒体服务器的存在
- codeforces C. Sonya and Problem Wihtout a Legend(dp or 思维)
- 将指定文件中的空格或换行删除(可选是否创建一个新文件)
- excel常用函数大全及示例(一)
- php敏感代码屏蔽,PHP敏感词汇屏蔽或替换
- matlab中 不是3和7倍数,从1到100的所有自然数中,不是3也不是7的倍数的数有多少个?...
- 嵌入式Linux设备驱动程序开发指南18(IIO子系统(二)具有硬件触发功能的IIO子系统ADC模块)——读书笔记
- Rivian-电动皮卡先行者
- java中什么是空指针异常_JAVA中的空指针异常如何处理?
- 【译】将字符转换为双精度浮点型
- LTE学习:PHICH(二)
- Vue+element 实现英雄榜功能
- 谷歌索引量查询,批量查询网站在谷歌RR权重值
热门文章
- python视频培训班
- markdown 表格代码在线生成工具
- ubuntu18.04安装lua5.3.6和luarocks3.8
- ocata版本vlan模式配置【ovs】
- 华三Track+NQA+静态路由配置实例
- esp8266电池供电方案_普通照明、应急照明、事故照明系统的9种设计方案解读,收藏好!...
- 智慧交通规划设计方案解析
- 使用html链接上传木马,一段植入木马的html代码
- 天涯怎么引流到qq?天涯社区如何靠发帖子引流?
- JAVA图书馆管理系统各个项目链接