一、需求背景
大文件上传,需要分片,并实现断点续传,进度条显示,秒传功能。下载时可以暂停,分段下载。
二、实现原理
1.分片:前端浏览器将文件根据设定的规则分割成多片小文件,一片一片的上传到服务器。
2.秒传:前端浏览器截取文件的前面几m和最后几m字节又或者全部字节进行md5编码,可以生成文件的唯一md5码,根据这个md5码可以唯一确定一个文件,上传文件时同时将该md5码传送到后台,又或者后端也按照相同的md5计算规则,最终在数据库记录文件的md5值。上传前询问后端该md5码是否存在,如果存在,则不需要重复上传。
2.前端断点续传:前端记录好发送成功的片数,当暂停事件产生或者网络错误事件产生后,从最后一片开始接着上传文件。
3.后端断点续传:记录文件上传的进度,前端根据md5值来询问该md5文件的上传进度,下次上传从该片数开始。
4.进度条:假设分片将文件等分切割成100片,当上传到第5份,进度条为5%,第99片上传开始为98%。
按照片数和上传进度来渲染进度条即可。
5.暂停/分段下载:判断请求头是否有Range参数信息,有则按照Range参数所请求的部分开始读取文件。
返回体里增加Content-Range参数信息,没有chunked的时候增加Content-Length参数信息。
扫描二维码关注公众号,回复:
4815582 查看本文章

三、后端代码实现
项目地址:https://gitee.com/chemphern/fileupload-demo
作者:神在异乡
来源:CSDN
原文:https://blog.csdn.net/chemphone/article/details/79196312