因为我自己的业务需求,所以用flask做个断点续传,这里主要说后端,业务里前端是vue。
主要分为三步,检验文件,分片上传,合并文件。
好处:
1.实现部分场景的一键上传,已上传的文件会在检验文件的时候被过滤,不会重复上传。
例如:某设备作业数据,每次作业完需要上传,但可能因为网络原因和不同地区作业,导致作业数据有些已上传而有些未上传,那一键上传自动就可以过滤已上传的,只传未上传的。
2.分片可以让在网络波动大或者中断的情况下,二次上传不需要上传已上传部分。
缺点:
1.我自己做的可能逻辑不严谨,会导致并发导致上传阻塞时,接收不完整的问题。
2.前后端需要重新配合制作,不再单纯的发和收,前端也需要进行分片。
一、文件检验
前端发送文件md5、总大小、分片数量、分片大小,flask接收后进行数据库判断
分为三种情况:
1.无:新建任务ID,MD5入库,返回前端
2.有,但未完成:返回已上传切片数(即断点),和任务ID
3.有,已完成:返回文件已存在,可根据业务需求再添加返回数据
二、分片上传
后端只要做好接收就行,接收并根据任务ID命名保存好,跟普通上传接收一样。
三、合并文件
1.根据文件类型分类入库
2.循环读取切片文件合并成完整文件
3.修改任务ID
具体代码实现因业务不同逻辑不同不一样。