大文件的上传与下载(文件服务器:Aliyun OSS)

大文件的上传

前端

  1. 调用 分片上传任务创建 接口。
  2. 文件切分为多个分片(Blob.prototype.slice),并行上传。
  3. UI显示多个分片上传进度(根据xhr源生事件UploadProgress)。
  4. 单个分片上传失败可以通过重试按键重新上传。
  5. 调用 合并分片 接口。

后端

1、编写 创建分片上传任务(InitiateMultipartUpload) 接口。

  1. 编写 上传分片(UploadPart) 接口。
  2. 编写 合并分片(CompleteMultipartUpload) 接口。

断点上传

前端计算文件内容hash值,上传前查询该hash值的文件分片是否存在于oss。
后端每次接受分片文件,并成功上传oss后,将分片的hash值写到redis,ttl设置为1天(时间根据业务决定);查询接口则直接查询redis中该hash是否存在即可。

细节

  1. hash计算(web-worker)
  2. 取消文件分片上传接口(AbortMultipartUpload)

大文件的下载

http1.1中包含了断点续传的协议,oss也支持断点续传,此时后端直接透传即可。详见MDN