文件快速上传和下载原理

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了文件快速上传和下载原理相关的知识,希望对你有一定的参考价值。

<1>Remote端(服务器端)数据的处理
没必要去实现这个算法。直接调用库就可以了。
chunk一块一块的数据块
1. 将Remote端(服务器端)的数据按照Chunck进行切分
2. 计算每一个chunk的弱校验和(Adler-32算法)与强校验和(MD5算法)
3. 保存进Map中,key为弱校验ID,value为chunk链表
 Map>

<2>Local 端处理(本地端)
1. 读取一个Chunck  判断数据是否够一个chunck大小
2. 根据读取到的Chunk 去Remote的Map中判断是否匹配. 如果匹配上看之前是否有differ Data ,如果有Differ Data则将diff Data加入patch中.
最终会得到一个以匹配上的chunk index + differ Data的链表


如果不匹配,就右移动一个字节,左边剩下的那个字节叫differ date,是服务器里没有的字节,是需要上传的字节。

differ date(**)
**01**02**03****0x  服务器收到的数据
然后匹配填充形成新数据
新数据 = differ date(客户端穿上来的)+ 服务器里已有的匹配数据

这种算法的优缺点:节省了上传的文件大小,但是牺牲了CPU(CPU需要不停地计算,占用了CPU)

网页是不能读取本地文件(处于安全考虑);所以有时需要装插件。

 

以上是关于文件快速上传和下载原理的主要内容,如果未能解决你的问题,请参考以下文章

Hadoop之HDFS原理及文件上传下载源码分析(下)

文件上传和下载

如何在FTP上实现文件的上传和下载

小小一方士 C# AsyncAwait 之 上传/下载文件进度条实现原理

文件上传和下载

快速开启FastDFS之旅...