分片上传
理念
分片上传就是采用化整为零的思想,在前端将一个大文件切分为许多小文件一起上传,这么做有什么好处呢? 首先将文件分片上传那么在上传到一半 发生意外比如断网,断电什么的,我们可能将一部分已经上传至服务器了,那么下次就不用再传我们已经上传成功的分片了,这就是下面要讲的断点续传,还有一个最大的好处就是分片同时上传,多个请求同时进来,本质上是会在tomcat的线程池中得到不同的请求线程,因此多个分片可以同时上传,大大加快了大文件的上传速度。
具体实现
那么具体实现就是在前端给每个文件计算一个唯一标识,然后发起一个分片上传请求后,将分好片的文件以分片索引为文件名称(假如分成了50片,那么第一片名字就是1第二片就是2)调用上传接口,服务器拿到视频唯一标识(例如MD5)后在redis中以这个唯一标识为key ,在minio中创建一个名称为这个MD5的桶,将分片上传至这个桶内,上传成功后的分片将自己的分片名称存入前面存在redis的set集合中。
当所以分片上传成功后,前端发起合并请求,将minio中名字为这个MD5的桶内的所有视频合并并转移至所有文件的桶内,分片上传即为成功,大大缩短了大文件上传的耗时。
断点续存
断点续存就是上面在上传部分分片文件后出现各种意外导致上传停止时,再次上传可以接着上次上传的进度。
具体实现
其具体实现就是依靠我们上传成功后存入redis集合中的名称,我们可以去redis中判断出已经上传过的分片文件,只需要将还没上传成功的分片继续上传即可。这就是断点续存,断点续存可以避免大文件的重复上传(假如一个200mb的文件,你已经上传了190mb了,但是中断后你又得重新上传200mb是不是很难受)。
秒传
秒传其实就是依赖上面的操作,在前端上传一个文件之前先拿着唯一标识(例如MD5)去redis中查看是否已经上传完毕了,如果查询到上传完毕之后直接返回上传成功即为秒传,因为当文件上传完毕后,我们的文件存储服务器上其实已经有了这个文件的资源了,可以同时引用无需重复上传,因此可以避免服务器资源冗余,还提升了用户体验。
本文着重解释分片上传、断点续存、秒传的开发思路,为您提供一个清晰的过程,有时候思路远比代码更重要,好了如果本文对您有帮助,希望可以点赞收藏加关注!