一、定义
为了方便后文的阅读,我们提前约定一些名词的含义。
弱网环境:所谓弱网环境简单来说就是网络质量较差导致丢包和延迟等现象,具体现象就是客户端获得响应很慢。参考重复签到的案例,弱网环境的模拟可以参考此篇文章多种方法。
断网续传/断网下载:在很多博客中也把断网续传和断网下载统称为断网续传,此处我们将断网续传和断网下载分开来讨论。断网续传特指从客户端向服务端的文件传输,在弱网环境下保证尽可能少的重传,在断网之后可以未上传的位置进行重传。断网下载则是从服务端向客户端的文件传输,在传输断掉之后,可以从下载未完成的位置继续下载。
说明:以JAVA后端为例讲解,且针对HTTP传输协议。
二、案例分析
1.GitHub上的文件上传项目
Github地址:https://github.com/dragon-wl/MyUploader
该项目是fork的一个很多star的项目,是具有完整前后端的项目。前端采用VUE框架,后端采用SpringBoot。其中实现了包括断点续传等多种上传方式。
断点续传的方法是,前端将需要上传的文件的分割成为若干份,分别构造请求进行上传。
2. 支持弱网环境的文件上传项目
地址:https://www.cnblogs.com/wangzehuaw/p/5610851.html
文件上传服务端内部处理流程图:
文件上传客户端内部处理流程图:
三、参考阅读资料
1.HTTP协议中范围请求:https://juejin.im/post/5b555f055188251af25700aa
2.断网续传和下载流程图原理:https://www.cnblogs.com/wangzehuaw/p/5610851.html
3.断点续传的Java Demo:https://blog.csdn.net/frankingly/article/details/51821287
4.多线程下载的Demo:https://blog.csdn.net/qq_33212500/article/details/80667518#commentsedit
5.基于fastdfs的文件上传的GitHub项目:https://blog.csdn.net/zw521cx/article/details/80704026