上传基本上是这样的:
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