如何实现一个切片上传服务
最近项目中遇到的一个需求,要求上传文件时如果碰上断网或是其他情况导致上传失败,那么下次开始上传同一份文件,可以从断点开始需传。百度了一下,发现要实现这个功能,需要后端的配合,所以自己就用 koa 实现一个简单的切片上传服务,用来给开发前端时调试用。现在把实现过程记录下来,以作备忘。
思路
要实现断点续传在于以下几点:
- 获取文件的唯一标识
- 获取文件的长度
- 记录已经上传的长度
- 记录这些数据
- 将文件切片并上传
- 将切片文件合并
- 文件的完整性校验
这些需要后端与前端共同配合完成。
实现
根据上述要点我们来看一下如何实现一个切片上传的接口。
记录文件元数据
我们需要先提供一个接口供前端调用,将文件的元数据上传,根据元数据生成一个上传任务,后续如果异常断开了任务,我们也能根据元数据获取到当前任务的进度。元数据包括文件名,文件唯一标识、文件长度、切片的大小。其中文件唯一标识是通过哈希算法计算得出,这边我们选择的是哈希算法是md5,这是一个很常用的哈希加密算法,特点是快速和稳定。
前端代码
后端接口代码
文件切片上传
获取到上传任务之后,就可以根据任务里的 chunkSize 将文件切片,然后上传了。
前端代码
通过递归调用函数,将 chunk 依次上传。
后端代码
后端使用了 koa-body 库来解析 multipart/form-data 格式的数据
文件合并与校验
切片全部上传之后就可以合并切片并校验文件的完整性了
前端代码
后端代码
在最后的合并步骤,我们要通过各项数据校验的文件的完整性
总结
最后放出完整代码
如果对你有帮助,希望给我点个star~
常见问题FAQ
- 免费下载或者VIP会员专享资源能否直接商用?
- 本站所有资源版权均属于原作者所有,这里所提供资源均只能用于参考学习用,请勿直接商用。若由于商用引起版权纠纷,一切责任均由使用者承担。更多说明请参考 VIP介绍。
- 提示下载完但解压或打开不了?
- 找不到素材资源介绍文章里的示例图片?
- 模板不会安装或需要功能定制以及二次开发?
发表评论
还没有评论,快来抢沙发吧!