初始模型:

最基础的文件上传就是:客户端选择文件 → 上传到服务端 → 服务端保存文件 → 返回文件地址或文件 ID。

  • 分片上传:大文件一次传输成本高,失败后整文件重传太浪费 → 客户端把文件切成多个 chunk,分别上传
  • 上传任务 / Upload ID:服务端需要知道这些分片属于同一个文件 → 先创建上传任务,返回一个 upload_id
  • 并发上传:分片之后可以提高整体上传速度 → 多个分片并行上传,但要控制并发数
  • 分片校验:网络传输过程中数据可能损坏 → 每个分片带序号和 checksum/hash,服务端校验完整性
  • 断点续传:网络中断后不能从头再来 → 记录已成功分片,恢复后只上传缺失部分
  • 失败重试:某个分片上传失败不能影响整个文件 → 只重试失败分片
  • 分片合并:所有分片上传完成后需要形成完整文件 → 服务端按分片序号合并,或直接完成对象存储的 Multipart Upload
  • 对象存储:大文件不适合长期压在业务服务器磁盘上 → 最终存到 S3 / OSS / COS 等对象存储,业务服务主要管理上传任务和文件元数据
  • 扩展能力:有额外需求时再补 → 秒传、权限校验、限速、病毒扫描、过期清理等

最后主线可以记成:

普通上传 → 大文件分片 → Upload ID 管理 → 并发上传 → 分片校验 → 失败重试 / 断点续传 → 合并文件 → 对象存储。