大文件上传

上传基本上是这样的:

1. 首先传送目标文件的工程分类、路径和名称,以及文件的md5散列值。

2. 如果服务器端发现已经有此文件,并且md5一致,返回“成功”。否则,如果存在此文件,但是md5不一致,

返回“需要上传”。否则,如果没有此文件,查找以前的与此md5相同的文件的快照,拷贝成目标文件,

返回“成功”。如果都失败,返回“需要上传”。

3. 客户端如果收到“需要上传”消息,开始分块(比如说1M字节为一块)上传。具体是:
 a. 首先发消息让服务器检此数据块的md5,如果客户端跟跟服务一致,跳过此块。
 b. 如果不一致,发送此块数据到服务器,覆盖服务器端文件文件数据块。
 c. 按照上述a和b两点,继续处理余下的数据块。
 d. 最后把服务器端文件的长度“修剪”成跟客户端文件一样长。

注意:客户端上传文件是并发多线程的,只是每一个文件的上传过程内部流程是顺序的

参考资料:https://www.cnblogs.com/gaocong/p/5512371.html

     http://www.jb51.net/article/80658.htm

     https://www.cnblogs.com/qianxiaojinnian/p/4731884.html

     http://www.jb51.net/article/80732.htm

     http://www.jb51.net/article/111463.htm     

     https://www.linuxidc.com/Linux/2014-09/106816.htm

     https://blog.csdn.net/yu18352566889/article/details/78499072

原文地址:https://www.cnblogs.com/moy-1313133/p/9050629.html