SpringMvc实现分片上传,断点续传,进度条上传,秒传,分段下载

一、需求背景

大文件上传,需要分片,并实现断点续传,进度条显示,秒传功能。下载时可以暂停,分段下载。

二、实现原理

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参数信息。

三、后端代码实现

项目地址:https://gitee.com/chemphern/fileupload-demo

你可能感兴趣的:(Spring)