调用S3 CompleteMultipartUpload报EntityTooSmall最小允许大小错误是什么原因
问题原因
你对S3分片上传的规则理解是正确的:只有最后一个分片可以小于5MB,其余所有非末尾分片都必须满足≥5MB的大小要求。本次报错的核心原因是单位换算错误:
你代码中用5_000_000作为分片阈值,但计算机存储单位中5MB对应的实际字节数是5 * 1024 * 1024 = 5242880,你的第一个分片仅5000004字节,远小于非末尾分片要求的最小大小,因此触发了EntityTooSmall错误。
修复方案
仅需将代码中分片上传的判断阈值修改为正确的5MB字节数即可:
def upload(self, chunk): '''Upload a chunk''' # 替换原有的5_000_000为正确的5MB对应字节数 if len(self.buffer) >= 5 * 1024 * 1024: self._upload_buffer() self.buffer += chunk
额外优化建议
如果你的业务场景中存在上传文件总大小不足5MB的情况,可以在end方法中增加逻辑判断:如果当前分片总数为1且剩余buffer大小不足5MB,直接调用put_object接口上传整个文件,避免分片上传的额外开销。
内容的提问来源于stack exchange,提问作者ca9163d9
相关产品推荐
相关产品推荐

