如何检查S3文件上传是否处于进行中?
关于S3上传状态查询的解决方案
核心结论
针对你的场景,能否查询上传状态取决于使用的上传方式:
1. 普通单文件PUT上传(小文件常用)
S3对单文件PUT上传是原子性处理的:
- 只有当文件完全上传成功后,才会在桶中可见
- 若上传中断/失败,S3不会留下任何该文件的上传痕迹,也不会存储“已启动上传但失败”的元数据
- 这种情况下,无法直接通过S3接口判断该文件是否曾经启动过上传或正在上传
2. 分段上传(Multipart Upload,大文件常用)
如果你的客户端使用分段上传(包括通过预签名URL发起的分段上传),S3会保留未完成的分段上传元数据,此时可以查询状态:
- 调用
ListMultipartUploads接口,指定目标前缀,即可列出该前缀下所有未完成的分段上传任务 - 每个未完成任务会包含文件键、上传ID、创建时间等信息,据此可以判断对应键的上传是否正在进行,或是已中断但未清理
- 注意:未完成的分段上传会占用存储空间,建议配置S3生命周期规则,自动清理超过指定时长的未完成分段上传
结合你的架构的落地建议
- 若当前使用单文件PUT上传:
- 可以让服务器结合自身存储的临时上传元数据+S3文件存在性来推断状态:
- 如果服务器记录了该键的上传请求,且S3中存在对应文件 → 上传完成
- 如果服务器记录了请求,但S3中无对应文件 → 上传失败(客户端中断/出错)
- 无法直接判断是否正在上传
- 可以让服务器结合自身存储的临时上传元数据+S3文件存在性来推断状态:
- 若切换为分段上传:
- 服务器可以封装
ListMultipartUploads的查询逻辑,提供给第二个客户端:- 查到对应键的未完成分段上传 → 上传中或已中断
- 未查到且S3中有文件 → 上传完成
- 未查到且S3中无文件 → 上传未启动或已失败并清理
- 服务器可以封装
内容的提问来源于stack exchange,提问作者EaterOfFromage
相关产品推荐
相关产品推荐

