标准答案

  1. 初始化时生成不可猜的 upload ID,保存目标对象、用户、大小、分片数和过期时间。
  2. 每个分片校验大小和摘要,使用唯一 `(upload_id, part_number)` 支持重复上传和断点查询。
  3. 合并前验证所有分片清单、顺序和总摘要,合并操作要幂等并在成功后清理临时分片。

题目解析

分片上传的服务端状态要记录 upload ID、用户、目标对象、大小、分片数量、摘要和过期时间。每个分片用唯一键和摘要保存,客户端重试同一分片应得到可预测结果。

合并前要确认所有分片齐全、编号连续、大小和摘要符合预期,合并动作要幂等。合并失败时保留仍可续传的分片,清理任务不能抢先删除唯一副本。

上传状态还涉及权限和资源占用。过期会话要异步清理,服务端不能让客户端通过 upload ID 读取或覆盖其他用户的分片。

代码示例

分片状态接口应返回已完成编号:

TypeScript
type UploadStatus = { uploadId: string; expiresAt: number; completedParts: Array<{ number: number; etag: string }> }

常见误区

  • 误区:只按文件名识别上传会话。改正:使用不可猜的 upload ID,并绑定用户、目标和过期时间。
  • 误区:合并前不校验分片数量和摘要。改正:验证清单、顺序、大小和总摘要后再合并。
  • 误区:失败后立即清理分片。改正:区分可恢复失败和已完成状态,保留续传窗口并用后台任务清理过期会话。

作者信息