大文件的上传
前端
- 调用 分片上传任务创建 接口。
- 文件切分为多个分片(Blob.prototype.slice),并行上传。
- UI显示多个分片上传进度(根据xhr源生事件UploadProgress)。
- 单个分片上传失败可以通过重试按键重新上传。
- 调用 合并分片 接口。
后端
1、编写 创建分片上传任务(InitiateMultipartUpload) 接口。
- 编写 上传分片(UploadPart) 接口。
- 编写 合并分片(CompleteMultipartUpload) 接口。
断点上传
前端计算文件内容hash值,上传前查询该hash值的文件分片是否存在于oss。
后端每次接受分片文件,并成功上传oss后,将分片的hash值写到redis,ttl设置为1天(时间根据业务决定);查询接口则直接查询redis中该hash是否存在即可。
细节
- hash计算(web-worker)
- 取消文件分片上传接口(AbortMultipartUpload)
大文件的下载
http1.1中包含了断点续传的协议,oss也支持断点续传,此时后端直接透传即可。详见MDN。