合并与校验策略

合并:分片到齐后的最后一步

所有分片上齐后,服务端把它们合并成完整文件。合并方式取决于存储:

  • 本地磁盘:按分片编号顺序合并写入一个文件。
  • 对象存储:提前适配对象存储的 multipart 能力,让分片直接进入对象存储,由对象存储完成合并(省去业务侧搬运)。

无论哪种,合并前都要做完整校验。

合并前必须检查

检查项目的
分片数量是否完整防止缺片
每个分片大小是否符合预期防止大小不一致
每个分片 hash 是否正确防止分片被篡改 / 传错
最终文件 hash 是否与初始化任务一致防止合并出错 / 内容被换

服务端不能完全信任客户端:客户端报的 hash 只是参考,合并后必须用服务端算出的整体 hash 校验。

合并的异步化

大文件合并很耗时,不应阻塞在同步请求里。推荐状态流转:

uploading -> merging -> scanning -> available
  • merging:合并任务在后台执行,客户端轮询或等回调。
  • scanning:合并完成后进入安全扫描(第 7 章)。
  • available:扫描通过,文件可访问。

用户界面应该展示「正在合并」「正在校验」而不是一个模糊的 100%。

临时分片的清理

分片上传引入一个必须处理的问题:未完成任务留下的临时分片。

  • 每个任务设过期时间(如 24 小时)。
  • 后台定时任务清理超时未完成的任务和分片。
  • 用户放弃上传、上传失败,都要有清理入口。

否则临时分片会悄悄堆积,存储成本失控。

一句话总结

分片上传把「大文件一次传」变成「小任务并行传 + 严格校验 + 后台合并」,成功率大幅提升;代价是状态、并发、清理都要管理好。

下一章看分片之上更贴近用户体验的一层:断点续传。

发现内容有问题?

告诉我们哪里需要改进。