秒传机制

基于文件哈希的内容去重实现秒传,避免重复上传相同文件

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

[!info] related notes

秒传机制

一句话定义

秒传是通过文件哈希判断内容是否已存在,如果存在则直接创建业务引用,不再要求上传内容。

核心内容

基本流程

  1. 前端把文件 hash 发给后端
  2. 后端查是否已有同 hash 的完整文件
  3. 如果有:直接创建业务引用,不再要求上传内容
  4. 返回”秒传成功”

关键点

秒传不是”文件名相同就跳过”,而是”内容相同”

必须依赖 hash 或其他强校验机制。

实现方式

很多系统还会做:

  • 物理文件只存一份
  • 多个业务记录引用同一底层文件对象

这就是内容去重

前端初始化时的判断

调用 /upload/init 时,后端可以返回:

{
  "uploadId": "u_123456",
  "chunkSize": 10485760,
  "uploadedChunks": [],
  "needUpload": false,
  "fileExists": true,
  "fileId": "f_001"
}

如果 needUpload: false,前端直接完成,无需上传任何 chunk。

存储优化

  • 同一文件只存一份物理副本
  • 通过引用计数管理生命周期
  • 节省存储空间和带宽

边界与易混淆点

  • hash 碰撞风险:理论上不同内容可能产生相同 hash,生产中通常用 SHA-256 或更强算法
  • hash 计算成本:大文件全量 hash 很慢,可先用抽样 hash 快速判断,后端再做严格校验
  • 跨用户去重:需要考虑权限隔离,不能让用户 A 看到用户 B 的私有文件
创建于 2026/3/28 更新于 2026/5/27