我是基于分块上传的模式实现断点续传的需求,当文件上传一部分断网后前边上传过的不在上传。
具体逻辑流程如下
- 前端对文件进行分块处理
- 前端开个多线程一块一块上传,上传前服务端发个消息检验该分块是否上传,如果在文件系统 OSS/minio 存在,则不在上传。
- 等所有分块上传完毕,服务端合并所有分块,通过md5校验文件的完整性。
- 引文分块全部上传到服务器,服务起将所有分块按照顺序合并,就是写每个分块文件内容按顺序依次写入一个文件中,使用字节流去读写文件。
- 前端传给服务端一个md5值,服务端合并文件后计算合并后文件的md5值是否和前端一致,如果不一致说明可能由于网络丢包等各种原因需要重新上传。
- 上传完毕之后清理冗余的分块文件。
Q 分块文件清理问题?
上传一个文件进行分块上传,上传一半传不了了,之前的分块文件你是怎样处理的?
- 在数据库中专门由张表记录minio存储文件的分块信息,
- 当文件开始上传就会写入表中,状态设置为上传中,上传完成会更行为上传完成。
- 当一个文件传了一般不在上传说明该文件没有上传成功,会有定时任务去查询表中的记录,如果文件未上传完成,则删除minio中没有上传成功的文件目录。