You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何获取S3及兼容API中文件的分片数,判断分片上传并实现分片下载?

判断S3兼容存储文件是否为分片上传的可行方案

ETag后缀方案的局限性

AWS S3中,分片上传的文件ETag确实会附加-分片数量的后缀(例如4个分片对应xxxx-4),但这属于AWS私有实现细节,并非S3标准规范的一部分:

  • 部分S3兼容存储(如Minio)不遵循此规则,ETag后缀逻辑与AWS不同
  • 还有部分存储可能完全不添加该后缀,导致无法通过此方式判断

因此该方案仅适用于AWS S3环境,跨存储场景下可靠性不足。

更通用的判断方案

1. 优先使用GetObjectAttributes

对于支持该接口的存储(如AWS S3、Minio),PartsCount字段是权威判断依据:

  • AWS S3:仅当文件通过分片上传时,返回大于0的PartsCount值
  • Minio:需结合文件大小与平台默认分片阈值(如默认100MB)判断,小于阈值的文件即使返回PartsCount,也可能是内部自动分片而非用户主动分片上传

2. 回退使用ListParts接口

若存储不支持GetObjectAttributes,ListParts是兼容性更强的选择:

  • 调用该接口,若返回有效分片列表,则文件为分片上传
  • 若返回Not a multipart upload类错误,则为普通上传
  • 注意:需确保调用者拥有对应的对象权限

3. 业务层记录元数据(最可靠方案)

如果上传流程由你的系统控制,可在上传时为对象添加自定义元数据(如x-amz-meta-is-multipart: true),后续直接读取该元数据即可判断,完全规避存储厂商实现差异。

分片下载的实现

无论文件是否为分片上传,都可通过GetObject接口的Range请求头实现分片下载:

  • 请求示例:添加请求头 Range: bytes=0-1048575(下载前1MB数据)
  • 响应判断:若返回206 Partial Content状态码,说明分片下载成功,可通过Content-Range头获取总文件大小与当前分片范围

内容的提问来源于stack exchange,提问作者Apollo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.12 19:07:23