文件断点续传

xxg 274a6ec8bc 文件断点续传 2 年之前
doc 49c05d5909 文件断点续传 2 年之前
src 274a6ec8bc 文件断点续传 2 年之前
.gitignore 49c05d5909 文件断点续传 2 年之前
LICENSE 49c05d5909 文件断点续传 2 年之前
README.md 49c05d5909 文件断点续传 2 年之前
pom.xml 49c05d5909 文件断点续传 2 年之前

README.md

文件上传下载经典案例

本案例提供了分片上传、断点续传、秒传、下载功能

先打个广告:

本项目接口文档使用的是自定义的无侵入Swagger组件该组件已发布到中央仓库,喜欢的可以点个star

还有Swagger升级版Knife4j组件,同样发布到了中央仓库,都是无代码侵入的

开发环境:JDK8,SpringBoot2.x,MySQL5.5,web-uploader

开发工具:IntelliJ IDEA

关于分片上传&断点续传

项目提供了普通文件上传接口 & 大文件分片上传接口,普通文件上传的接口只是附加提供的,目前与前端集成的是大文件分片上传,接口是breakpointResumeUpload。

分片: 分片任务是在前端由web-uploader插件完成,流程:1.前端先发送check-file(检查文件MD5)来确认文件是直接秒传还是分片上传,如果计算出文件MD5已经存在,则启用秒传(秒传就是不传),如果是新文件,则需要分片上传,由web-uploader插件将文件按固定大小进行切割,然后逐片上传。

断点续传: 意思就是一个大文件分了多少片,这些片已经上传了哪些,还有哪些没上传,这些都会记录在文件存储目录下的.config文件中,当你上传大文件时,传一部分后刷新浏览器或关闭浏览器,这时候传输会中断,然后你再打开页面重新上传该文件,它会先检测还有哪些片没有上传,然后直接上传的上次未传的片,这就是断点续传。

项目结构

输入图片说明

项目运行

1.导入数据库文件

导入doc目录下的sql文件到数据库,并修改application.yml配置文件中的数据库配置

输入图片说明

2.修改application.yml中的文件保存目录、端口号等等(自行选择配置)

输入图片说明

3.启动项目,然后双击打开前端页面:index.html

先看一下效果:可一次性上传多个文件(这里只演示了一个,因为给忘记了,嫌麻烦就没有重新测试)

输入图片说明

断点续传测试

1.修改前端URL常量(前端全局使用的URL):

输入图片说明

2.点击“+”上传

打开doc文件夹下的index.html,选择文件,这里为了显示断点续传的效果,我选择了一个大文件,将自动上传

上传中:

输入图片说明

上传完成:

输入图片说明

注:

1.上传完成后再次选择这个文件就会启动秒传功能。

2.上传过程如果中断,下次再上传该文件将只会上传剩下的分片(断点续传)

3.上传完成后文件配置路径中会生成.conf文件,这个文件就是判断文件是否已经上传的配置,如果删除,则下次上传不会启动秒传,而是创建一个后缀为_tmp的文件,导致新上传文件不可用。所以这里可以进行二次开发进行限制上传、覆盖上传或者文件重命名操作。

其他配置说明

部署至Linux系统注意事项(打包时配置文件分离)

​ 本项目试运行在Windows,如要部署到Linux系统,因为两者的系统路径格式不同,所以需要改配置文件中的文件上传路径,所以为了方便修改配置文件,就把配置文件分离了,部署的时候在要运行的jar包的同级目录下创建一个config目录,然后把配置文件直接拷贝进去就能正常使用了。 ​ 另外可以百度下配置文件的加载顺序及配置文件扫描路径,因为一般项目部署都需要改动一些配置,所以这么做就是为了方便部署。

接口文档

本项目提供了Swagger接口文档,访问:http://IP:端口/swagger-ui.html

输入图片说明

接口就不再一一介绍,在代码中有解释。

上传接口与前端的对接时,只需要传过来的是form表单里的即可。例如:

输入图片说明

同理其他前端UI框架的文件上传也是利用表单进行传输的。