Skip to content

文件分片上传、断点续传

1. 文件分片上传

  • 详见分片上传DEMO,后台 [ DEMO - 分片上传-demo ] 菜单,切换到 【分片上传】

文件分片上传

  • 代码位置:/web-vue2/src/views/demo/files/index.vue

文件分片上传

  • 封装了分片上传组件:/web-vue2/src/components/Upload/PluploadChunk.vue

说明

  • 前端使用 plupload 组件进行分片上传
  • 配置上传接口地址 uploadServerUrl
  • 文件保存目录 uploadDir
  • 分片大小 chunkSize
  • 允许上传类型限制 mimeTypes
  • 允许上传文件大小限制 maxFileSize

文件分片上传

  • 后端接口代码

工具类:UploadFileChunksUtils.upload()方法,每个分片单独保存,最终合并成一个文件,并删除过程分片文件。 文件分片上传

2. 文件断点续传

说明

  • 断点续传,基于分片上传!
  • 把文件分片,每次上传前,检测分片是否已上传;
  • 若已上传,则跳过;
  • 未上传的则继续上传,最后合并
  • 详见断点续传DEMO,后台 [ DEMO - 分片上传-demo ] 菜单,切换到 【断点续传】

文件断点续传

  • 代码位置:/web-vue2/src/views/demo/files/index.vue

文件断点续传

  • 封装了断点续传组件:/web-vue2/src/components/Upload/FileChunkResume.vue

文件断点续传

  • 后端接口代码

分片上传,分片文件上传后,存在redis缓存中。
下次上传,根据 分片文件的md5 ,检测缓存中是否已存在,存在则直接拷贝,不需要上传。 文件断点续传

3. 定时任务删除缓存照片

  • 功能:开启定时任务,每天晚上凌晨,定时删除无用的、缓存的分片文件。
  • 代码:com.kg.core.quartz.job.DeleteFileChunkTempJob
  • 定时任务如下图(建议部署到正式环境一定要开启该定时任务)

定时任务删除多余的缓存照片

  • 定时任务,代码如下:

定时任务删除多余的缓存照片

  • 工具类:UploadFileChunksUtils.deleteChunksByQuartz() 方法
  • 分片临时上传目录:/chunks/temp
java
/**
 * 删除 - 分片文件临时存储文件
 *
 * @param folder 文件夹地址
 */
public static void deleteChunksByQuartz(String folder) {
    String tempFolder = FilePathConfig.SAVE_PATH + "/chunks/temp/" + folder;
    if (FileUtil.exist(tempFolder)) {
        FileUtil.del(tempFolder);
    }
}