通常上传和下载文件过程中,由于环境影响因素可能造成上传或者下载中断,为了避免文件重新下载或者上传造成额外的传输成本和时间成本,Anyshare 对文件的上传和下载采用断点续传的方案,不仅可以解决此类场景。同时在对大文件的上传/下载中,将文件分成若干小块进行上传,可以提高上传效率,较少资源占用,还能及时记录文件块上传的进度到数据库。
技术原理:
将一个文件按照一定的规则分割成多个小文件,然后客户端每次只上传一个小文件(利用多线程技术每次上传多个小文件),服务器接收到上传过来的小文件后根据一定的规则来组合这些小文件。断点续传的关键是断点,所以在制定传输协议的时候已经设计好。
断点续传下载:

首先判断文件是否存在,用户是否有下载权限。
下载前,客户端先指定缓存目录(Web使用浏览器默认缓存目录)。
下载过程中如果出现异常中断,客户端会记录下当前中断的位置,在网络恢复或者重新登陆后,读取本地缓存的中断点,向服务端重新发起下载请求,带上Range参数。
中断的部分下载完成后,客户端本地进行合并。
断点续传上传:

选择本地一个文件,上传前先将这些基本信息记录至客户端。
客户端根据文件大小,如果超过一定大小,可按照一定规则对文件进行分片。
客户端每次只上传一个文件的小分片,上传完一个分片,将这个文件的分片位置更新至本地缓存。
如果出现网络异常或其他异常中断,在网络恢复或者重新登陆后,读取本地缓存上次未完成的分片位置,向服务端重新发起这个分片的上传请求。
服务端接收到所有分片后进行组装拼接,一个完整的文件信息保存至服务端存储。