# OPEN-文件上传下载+大文件断点续传+漂亮的前端页面 **Repository Path**: dingjunjun_codeSpace/vip-file-upload ## Basic Information - **Project Name**: OPEN-文件上传下载+大文件断点续传+漂亮的前端页面 - **Description**: 基于Springboot2.x的文件上传下载经典案例,文件上传下载+大文件断点续传、秒传+漂亮的前端页面 - **Primary Language**: Java - **License**: MulanPSL-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 334 - **Created**: 2022-08-27 - **Last Updated**: 2022-08-27 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # **文件上传下载经典案例** ### 本案例提供了分片上传、断点续传、秒传、下载功能 #### 先打个广告: 本项目接口文档使用的是**自定义的无侵入Swagger组件**该组件已发布到中央仓库,喜欢的可以点个star - **Maven地址:** https://mvnrepository.com/artifact/com.github.wgbvirtuals/vip-swagger - **源码地址:** https://gitee.com/Analyzer/vip-swagger 还有Swagger升级版**Knife4j组件**,同样发布到了中央仓库,都是无代码侵入的 - **Maven地址:** https://mvnrepository.com/artifact/com.github.wgbvirtuals/vip-knife4j-starter - **源码地址:** https://gitee.com/Analyzer/vip-knife4j-starter **开发环境:JDK8,SpringBoot2.x,MySQL5.5,web-uploader** **开发工具:IntelliJ IDEA** ### 关于分片上传&断点续传 项目提供了普通文件上传接口 & 大文件分片上传接口,普通文件上传的接口只是附加提供的,目前与前端集成的是大文件分片上传,接口是breakpointResumeUpload。 **分片:** 分片任务是在前端由web-uploader插件完成,流程:1.前端先发送check-file(检查文件MD5)来确认文件是直接秒传还是分片上传,如果计算出文件MD5已经存在,则启用秒传(秒传就是不传),如果是新文件,则需要分片上传,由web-uploader插件将文件按固定大小进行切割,然后逐片上传。 **断点续传:** 意思就是一个大文件分了多少片,这些片已经上传了哪些,还有哪些没上传,这些都会记录在文件存储目录下的.config文件中,当你上传大文件时,传一部分后刷新浏览器或关闭浏览器,这时候传输会中断,然后你再打开页面重新上传该文件,它会先检测还有哪些片没有上传,然后直接上传的上次未传的片,这就是断点续传。 ### 项目结构 ![输入图片说明](doc/images/1660528590669.png) ### 项目运行 ##### 1.导入数据库文件 导入doc目录下的sql文件到数据库,并修改application.yml配置文件中的数据库配置 ![输入图片说明](doc/images/1660528836136.png) ##### 2.修改application.yml中的文件保存目录、端口号等等(自行选择配置) ![输入图片说明](doc/images/1660528941947.png) ##### 3.启动项目,然后双击打开前端页面:index.html 先看一下效果:**可一次性上传多个文件(这里只演示了一个,因为给忘记了,嫌麻烦就没有重新测试)** ![输入图片说明](https://images.gitee.com/uploads/images/2020/0903/184500_d41dadc1_1676717.png "image-20200903183735347.png") ### 断点续传测试 ##### 1.修改前端URL常量(前端全局使用的URL): ![输入图片说明](https://images.gitee.com/uploads/images/2020/0903/184527_101a101b_1676717.png "image-20200903183521963.png") ##### 2.点击“+”上传 打开doc文件夹下的index.html,选择文件,这里为了显示断点续传的效果,我选择了一个大文件,将自动上传 上传中: ![输入图片说明](https://images.gitee.com/uploads/images/2020/0903/184543_34bb6839_1676717.png "image-20200903183705481.png") 上传完成: ![输入图片说明](https://images.gitee.com/uploads/images/2020/0903/184603_40477348_1676717.png "image-20200903183820976.png") **注:** 1.上传完成后再次选择这个文件就会启动秒传功能。 2.上传过程如果中断,下次再上传该文件将只会上传剩下的分片(断点续传) 3.上传完成后文件配置路径中会生成.conf文件,这个文件就是判断文件是否已经上传的配置,如果删除,则下次上传不会启动秒传,而是创建一个后缀为_tmp的文件,导致新上传文件不可用。所以这里可以进行二次开发进行限制上传、覆盖上传或者文件重命名操作。 ### 其他配置说明 #### 部署至Linux系统注意事项(打包时配置文件分离) ​ 本项目试运行在Windows,如要部署到Linux系统,因为两者的系统路径格式不同,所以需要改配置文件中的文件上传路径,所以为了方便修改配置文件,就把配置文件分离了,**部署的时候在要运行的jar包的同级目录下创建一个config目录,然后把配置文件直接拷贝进去**就能正常使用了。 ​ 另外可以百度下配置文件的加载顺序及配置文件扫描路径,因为一般项目部署都需要改动一些配置,所以这么做就是为了方便部署。 ### 接口文档 本项目提供了Swagger接口文档,访问:http://IP:端口/swagger-ui.html ![输入图片说明](doc/images/1660533737353.png) 接口就不再一一介绍,在代码中有解释。 上传接口与前端的对接时,只需要传过来的是form表单里的即可。例如: ![输入图片说明](https://images.gitee.com/uploads/images/2020/0806/175323_adb2427c_1676717.png "1.png") 同理其他前端UI框架的文件上传也是利用表单进行传输的。