2020-01-16 1.md 1.5 KB

分片上传

关于大文件分片上传的一些思考

浏览器

创建文件 hash

  • 创建文件的 hash 值。
  • 提交上传文件基本数据和文件 hash 值。
  • 如果存在的话,忽略本次文件上传;并将该文件路径指向用户服务器存储空间中。

当文件不存在或上传一部分文件数据时,进入下一流程。

文件分片

  • 访问服务器获取文件分片最大值。
  • 通过循环切割文件,并创建每一个分片的 hash

文件上传

  • 根据首次与服务器通信结果,判断是否为断点上传
  • 如果是断点上传,判断断点位置,
  • 获取对应分片,以此分片为起点开始上传

进度条

  • 不论是断点还是首次上传文件,进度条为已传分片数除总分片数

服务器

检测文件 hash

数据库检测 hash 是否存在

存在

  • 将该文件与用户传入文件基本信息结合
  • 存入云空间
  • 通知前端,文件秒传成功

不存在或断点

  • 创建临时上传空间(存在时间为最后断点上传后的 24 个小时或上传成功后)
  • 用户云盘数据中写入临时上传信息(存在时间为最后断点上传后的 24 个小时或上传成功后)
  • 如果是断点之后续传,告知前端最后一个分片 hash

文件上传

  • 获取分片数据,存入临时上传空间
  • 上传所有分片,合并分片,创建文件 hash,与文件原 hash 比对
  • hash 不一致,告知用户上传失败
  • hash 确认无误,放入用户云盘中
  • 清理数据