话前
一开始在做文件上传的时候,没考虑过文件上传失败的问题,因为上传的多数都是几十兆几百兆的文件。但是也有会上传比较大的文件,此时传统的上传直接没了反应,也不知道上传了多少就很头疼。后来网上搜索的关于大文件上传的思路,网上的思路还是蛮多的,都挺成熟的,然后就想把大文件分片下载这个技术引到项目中。最后也是成功引入分片上传和断点续传,还有大文件分片下载。本篇就来聊一聊大文件分片上传。
一、为什么要使用分片上传
要用分片上传,首先要知道为什么要使用分片上传,或者说那些场景下要使用分片上传。
1.文件过大:一个文件过大,几个G或者几十G的大文件就非常适合分片上传
2.网络不稳定:网络时好时坏或者比较慢的情况
3.断点续传:传了一部分后暂停想继续传的时候,分片上传也是个不错的选择(断点续传需要考虑其他因素,这里不做具体详情的讲说)
二、分片上传原理
了解了为什么要使用分片上传后,就要引入分片上传了。
分片上传的大致流程:前端对文件进行切片,然后分片发送到服务端。服务端接收到分片文件后保存相应的文件,并对每片做好排序(我是采用文件名前序号的方式),最后合并文件,这是总体流程。具体的流程如下:
1.客户端对将要上传的文件定义唯一标识,并对文件进行分片(每10兆为一片)
2.客户端调用服务端接口,进行上传文件片(客户端每次都要携带文件唯一标识,客户端可以每五个一组进行并行上传)
3.服务端用文件唯一标识建临时文件夹(用来存储文件片,最后方便在这个文件下删除文件片)
4.客户端每次上传完后根据服务端返回的结果判断该组的文件片是否都上传从成功,若有没成功的文件片,可以单独对该文件片进行重新上传
5.服务端根据上传文件夹中文件片的总和跟客户端分片的总和是否相等判断文件片是否都上传完成
6.分片文件上传完成后,服务端合并文件片,并删除临时文件夹中分片文件