完整性校验

大文件上传的完整性校验策略,包括 chunk 级和文件级哈希校验

#type / concept #status / evergreen #tech / dev / frontend #tech / dev / backend

[!info] related notes

完整性校验

一句话定义

完整性校验是在分块上传的每个环节(chunk 上传、chunk 合并后)通过哈希比对确保文件内容未损坏。

核心内容

校验层次

层次校验对象目的
chunk 级单个分块确保每个分块传输正确
文件级合并后完整文件确保合并结果与原始文件一致

chunk 级校验

前端上传每个 chunk 时可携带 chunkHash

{
  "uploadId": "u_123",
  "chunkIndex": 5,
  "chunkHash": "abc123..."
}

后端收到后计算实际 hash 并比对,不一致则返回错误。

文件级校验

合并完成后,后端计算最终文件 hash:

  1. 前端初始化时传入 fileHash
  2. 后端合并所有 chunk
  3. 计算合并后文件的 hash
  4. 比对是否与 fileHash 一致
  5. 一致则标记任务完成,不一致则标记失败

常用哈希算法

  • MD5:速度快,但安全性较弱,适合内部校验
  • SHA-256:安全性强,适合生产环境
  • CRC32:速度极快,适合 chunk 级快速校验

校验失败处理

  • chunk 级失败:通知前端重传该 chunk
  • 文件级失败:保留状态以便排查,可重试合并或标记任务失败

边界与易混淆点

  • 不能只相信”所有 chunk 都上传完了”:必须做最终 hash 校验
  • 校验成本:大文件全量 hash 计算耗时,可考虑抽样校验或增量 hash
  • 网络传输校验 vs 存储校验:TCP 已有校验,但应用层校验仍是必要的(防止存储介质错误)
创建于 2026/3/28 更新于 2026/5/27