S3分片上传除最后分片外均超5MB仍报EntityTooSmall错误原因咨询
S3分片上传触发最小分片大小报错的可能原因
前提校验
S3要求除最后一个分片外,其余分片最小为 5MiB(二进制单位),换算为字节是:5 * 1024 * 1024 = 5242880 字节
对照你提供的分片大小,前8个分片均满足该阈值,最后1个分片1419593字节符合最后分片无最小限制的规则,触发报错的可能原因如下:
- 分片编号与实际上传顺序不匹配
调用CompleteMultipartUpload接口完成分片上传时,传入的分片列表顺序错误、遗漏分片,或者未将id为9的分片标记为最后一个分片,会导致S3判定所有分片都需要满足最小5MiB的要求,小于阈值的9号分片就会触发该报错。 - 本地统计的分片大小与S3实际接收的大小不一致
你统计的StreamLength是本地数据流的原始长度,如果开启了客户端侧加密、传输层自动追加校验信息、或者数据流读取时出现提前截断,会导致实际上传到S3的分片大小小于5242880字节,触发校验失败。你可以调用ListParts接口查询S3端实际存储的各分片大小,和本地统计值做核对。 - 阈值计算使用了十进制单位
如果你的分片大小判断逻辑用十进制5 * 1000 * 1000 = 5000000字节作为最小分片阈值,刚好卡在5000000到5242880字节之间的分片会被你判定为符合要求,但实际达不到S3的最小分片标准,触发报错。对照你提供的分片数据,id为5的分片仅比5242880大188字节,若存在计算误差很容易触发该问题。 - 使用非AWS原生的S3兼容存储有更高限制
如果你对接的是其他兼容S3接口的对象存储服务,部分服务商自定义了更高的最小分片阈值(常见为8MiB、10MiB),你的分片大小未达到对应服务商的要求,也会抛出相同报错。 - 部分分片上传失败未补传
如果前8个分片中存在上传失败的情况,你没有捕获到异常并重传,会导致S3端实际存储的对应分片大小为0或者不完整,小于最小阈值触发报错。
内容的提问来源于stack exchange,提问作者Chandu
相关产品推荐
相关产品推荐

