文件分片上传和断点续传
本文使用 MinIO 作为文件服务中间件,前端使用 vue3 和 ElementPlus,后端使用 springboot 实现文件上传中的分片、断点续传功能。
实现思路:
- 前端对大文件计算 MD5 值,然后对文件进行分片,计算分片数量;
- 前端携带 MD5 值请求服务端,查询文件是否已经上传过以及是否上传完毕:
- 如果未上传,返回为空;则前端调用初始化接口初始化一个任务;
- 如果已上传完毕,则直接返回文件相关信息;
- 如果已上传但是未上传完毕,则返回文件信息及已上传分片信息;
- 前端根据服务端返回的文件信息,判断是否需要上传分片,如果分片未上传,则上传分片,如果分片已上传,则跳过分片上传(即断点续传):
- 文件上传有两种方式:
- 前端请求服务端获取每个分片的上传地址(如 MinIO 服务的上传地址),然后直接请求该地址将文件上传至 MinIO,无需经过服务端,节省带宽但是安全性低;
- 前端将分片上传到服务端,由服务端将分片上传至 MinIO,需要占用服务端带宽,但是安全性高;
- 前端将全部分片上传完毕后,请求服务端端合并分片接口;服务端调用文件服务中间件进行合并分片,然后返回文件相关信息。