Mar 27, 2024

如何实现分块上传

分块上传;nodejs;javascript;upload

Steven
by Steven
如何实现分块上传

前端设置分块阈值,当文件size超过这个阈值,则进行分块上传

流程:

  1. 前端首先对这个文件进行分块,根据chunkSize计算出所需要的totalChunks,然后遍历每个块分进行SHA256 哈希值更新,最后进行sha256.finalize获取整个文件的哈希值
  2. 调用后端**uploadKey** 接口,把文件的哈希值和一些其他信息传给后端,比如size,totalChunks这些
  3. 后端**uploadKey** 接口拿到这些东西,根据配置计算出文件的子路径,并生成一个临时文件目录,用于存放后续的分块文件;使用 crypto 模块生成一个唯一的上传密钥;将上传相关信息写入到临时文件夹下的 info.txt 文件中;返回一个 JSON 对象,包含生成的密钥和目标文件在服务器上的路径1
  4. 前端拿到key后,根据这个key在前端对分块文件进行计算哈希值,并连同文件一起通过**setChunk** 接口传给后端,也会带过来num字段,这个就是分块的顺序
  5. 后端**setChunk** 接口拿到分块文件的哈希值和元数据后,在后端也用这个key对源文件进行哈希值计算,然后与前端的哈希值进行对比,如果一致,则上传到临时目录
  6. 前端遍历上传完最后一个分块文件后,向**setChunk** 接口传end标识符,并把fileChecksum传给后端
  7. 后端**setChunk** 拿到结束标识符后,进行chunk文件的合并,并计算合并后的文件的哈希值,与fileChecksum进行对比,如果一致,则上传到文件的目录
Continue Reading