是否可以通过单次请求列举分片上传对象的所有分片信息?
结论
可以,完全不需要发起2000次HEAD请求,根据你的分片对象所处状态,最多只需要1~2次请求就能拿到所有分片的大小信息。
分片上传任务未完成(未调用CompleteMultipartUpload接口)
直接调用ListParts接口即可,接口返回结果会直接包含所有已上传分片的编号、大小、ETag等完整信息:
- 单次
ListParts请求最多返回1000个分片的信息,2000个分片只需要搭配分页标记参数发起2次请求就能拉取全量数据 - 不需要额外解析响应头,返回结果中直接给出每个分片的精确大小
分片上传已完成,对象已正常存储
绝大多数S3兼容的对象存储服务都支持GetObjectAttributes接口,你只需要在请求参数中指定需要返回Parts属性,即可一次性拉取该对象所有分片的元数据:
- 和
ListParts逻辑一致,单次请求最多返回1000个分片,2000个分片最多2次请求即可完成拉取 - 响应结果中每个分片条目都自带大小字段,不需要单独发起
HEAD请求逐个查询
补充说明:你当前使用的逐分片发起HEAD请求的方案虽然逻辑可行,但请求成本过高,还容易触发存储服务的请求频率限制,使用上述官方接口的效率要高很多。部分非常老旧的对象存储服务如果不支持GetObjectAttributes接口,可先通过HeadObject接口返回的x-amz-mp-parts-count头确认分片总数,再根据实际服务特性选择兼容方案,主流云厂商的对象存储服务均已支持上述接口,无需额外兼容。
内容的提问来源于stack exchange,提问作者C.M.
相关产品推荐
相关产品推荐

