今天和同事在群里讨论“QQ上传大文件/QQ群发送大文件时,可以在极短的时间内完成”是如何做到的。
有时候我们通过QQ上传一个几百M的文件,竟然只用了几秒钟,从带宽上限制可以得出,实际上传文件是不可能的。
实现的思路肯定是根据文件内容生成一个“唯一的标识符”,根据这个标识符去判断服务器上是否已经存在这个文件,如果存在,则不需要再次上传。
但是根据文件内容生成“唯一的标识符”,效率会不会有问题呢。
于是用PHP做个最简单的测试:
以下是代码片段:
<?php
include("./Timer.class.php");//timer类用于统计程序运行时间
Timer::getInstance()->start();//开始计时
$big_string = file_get_contents("./test.zip");//读取文件内容
echo "文件大小是:".strlen($big_string)/(1024*1024)."MB<BR>";//输出文件大小
echo md5($big_string)."<BR>";//输出MD5后的字符串
Timer::getInstance()->printTime();//输出耗费的时间
?>
输出结果如下:
以下是引用片段:
文件大小是:487.146002769MB
c9cb9487b71fa2130b5d1110a2819e34
Timer NO:1 Did something in 3.28920602798 seconds;
可以看到,MD5一个487M的文件,只用了3.29秒,比我预想的快了许多。因此,通过“md5('文件内容')”生成“唯一标识符”的方法是完全可行的,效率不会存在问题,我想上面的方法肯定还有优化的空间。QQ的大文件快速上传估计就是通过这样的方式实现的。在上传大文件的时候,先查询下服务器看看文件的“唯一标识符”是否存在,只要这个标识符存在,就不用再上传文件了。
扩展:
1、由于md5的特性,“md5('文件内容')”也可以用于校验“文件的完整性”和“内容是否有被修改过”,这也是我们下载一些软件时,在旁边能看到MD5效验码的原因。
2、APACHE 的 ETAG 实现:APACHE 的 ETAG 是可以自己定义方法的,较普遍的做法是根据文件的内容生成ETAG。
因 为当有多台web服务器时,以浏览图片为例,想要让浏览器缓存你的图片。但你传到不同服务器上的图片时间不会一致,所以不能用文件的 last_modify时间作为cache的参照,这时候就可以采取发送ETAG,ETAG是按照图片内容生成特定字符串的。只要文件内容没有改 变,ETAG就不会改变,cache就会有效。
原文地址:http://web.itivy.com/article-740-1.html
QQ上传大文件为什么这么快的更多相关文章
-
tp5+layui 实现上传大文件
前言: 之前所写的文件上传类通常进行考虑的是文件的类型.大小是否符合要求条件.当上传大文件时就要考虑到php的配置和服务器的配置问题.之前简单的觉得只要将php.ini中的表单上传的 大小,单脚本执行 ...
-
[Asp.net]Uploadify上传大文件,Http error 404 解决方案
引言 之前使用Uploadify做了一个上传图片并预览的功能,今天在项目中,要使用该插件上传大文件.之前弄过上传图片的demo,就使用该demo进行测试.可以查看我的这篇文章:[Asp.net]Upl ...
-
php 上传大文件配置upload_max_filesize和post_max_size选项
php 上传大文件配置upload_max_filesize和post_max_size选项 (2014-04-29 14:42:11) 转载▼ 标签: php.ini upload _files[f ...
-
PHP上传大文件 分割文件上传
最近遇到这么个情况,需要将一些大的文件上传到服务器,我现在拥有的权限是只能在一个网页版的文件管理系统来进行操作,可以解压,可以压缩,当然也可以用它来在线编辑.php文件. 文件有40M左右,但是服务器 ...
-
ASP.NET上传大文件的问题
原文:http://www.cnblogs.com/wolf-sun/p/3657241.html?utm_source=tuicool&utm_medium=referral 引言 之前使用 ...
-
php 上传大文件主要涉及配置upload_max_filesize和post_max_size两个选项
php 上传大文件主要涉及配置 upload_max_filesize 和post_max_size两个选项 今天在做上传的时候出现一个非常怪的问题,有时候表单提交可以获取到值,有时候就获取不到了 ...
-
SWFUpload上传大文件(暂时用用,真正用的时候还是要改的)
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...
-
PHP上传大文件和处理大数据
1. 上传大文件 /* 以1.5M/秒的速度写入文件,防止一次过写入文件过大导致服务器出错(chy/20150327) */ $is_large_file = false; if( strlen($x ...
-
IIS7下swfupload上传大文件出现404错误
要求上传附件大小限制在2G,原本以为可以轻松搞定.在编译模式下可以上传大文件,可是在IIS7下(自己架的服务器),一上传大的文件就会出现 Http 404错误,偶尔有的文件还有IO. error错误. ...
随机推荐
-
POJ1159 Palindrome(dp)
题目链接. 分析: 感叹算法的力量. 方法一: 设 dp[i][j] 为字符串 s, 从 i 到 j 需要添加的最少字符数. 那么如果 s[i] == s[j], dp[i][j] = dp[i+1] ...
-
ASP.NET 短路由配置
1. 首先在项目新建文件叫App_Code或者App_Start 在文件中新建WebFromRouteHandler.cs 文件. WebFromRouteHandler中的代码如下, public ...
-
通过focusInEvent和eventFilter两种方法改写控件颜色(自定义控件就是这么来的)
http://www.cnblogs.com/hicjiajia/archive/2012/05/30/2526768.html http://www.cnblogs.com/hicjiajia/ar ...
-
jQuery 简单滑动轮播图效果
一般页面简单轮播图效果用jQuery制作更加简单.我们来看看以下效果是如何来进行制作的. 其html结构下所示: <div id="box"> < ...
-
支持向量机(SVM)理论总结系列.线性可分(附带R程序案例:用体重和心脏重量来预测一只猫的性别)
附注:不要问我为什么写这么快,是16年写的. 1.名词解释 支持向量机中的机:在机器学习领域,常把一些算法看做一个机器,如分类机(也叫作分类器) 2.问题描述 空间中有很多已知类别的点,现在想用一个面 ...
-
【NLP】Conditional Language Models
Language Model estimates the probs that the sequences of words can be a sentence said by a human. Tr ...
-
[FJOI2018]领导集团问题
[FJOI2018]领导集团问题 dp[i][j],i为根子树,最上面的值是j,选择的最大值 观察dp方程 1.整体Dp已经可以做了. 2.考虑优美一些的做法: dp[i]如果对j取后缀最大值,显然是 ...
-
20155306 白皎 0day漏洞——漏洞利用原理之DEP
20155306 白皎 0day漏洞--漏洞利用原理之DEP 一.DEP机制的保护原理 1.为什么出现DEP? 溢出攻击的根源在于现代计算机对数据和代码没有明确区分这一先天缺陷,就目前来看重新去设计计 ...
-
EUI组件之CheckBox
一.CheckBox常规使用 拖动一个checkBox到exml即可 点击效果 二.代码中监听事件 /** * 主页场景 * @author chenkai 2018/5/26 */ class Ho ...
-
dubbo SpringContainer
dubbo SpringContainer Spring启动类容器 SPI service provider interfaces 服务提供借口 Singleton 单例 ThreadSafe 线程安 ...