MinIO S3分片上传:文件大小等于分片大小时ETag异常
MinIO分片大小等于文件大小时ETag异常解析
核心问题原因
你的应用在上传大小恰好等于分片大小的文件时,错误地生成了两个分片(一个满大小分片 + 一个空分片),导致MinIO按两个分片的规则计算ETag,从而和预期的单分片ETag不符。
MinIO ETag生成规则回顾
- 单块上传(PutObject):ETag直接等于文件内容的MD5哈希值,无后缀。
- 分片上传(Multipart Upload):ETag是所有分片MD5哈希值的二进制拼接后的MD5哈希值,再加上
-分片数量后缀。
你的场景拆解
- 5242879字节文件:小于分片大小,应用使用单块上传,ETag为文件MD5,和预期一致。
- 5242880字节文件:
- 你预期的是单分片上传的ETag:
81485c0e873d222199469076b60f30e9-1(该值是5242880个0的MD5,加单分片后缀)。 - 但实际应用上传了两个分片:一个5242880字节的分片(MD5为
81485c0e873d222199469076b60f30e9),加上一个0字节的空分片(MD5为d41d8cd98f00b204e9800998ecf8427e)。 - MinIO将这两个分片的MD5二进制拼接后计算MD5,得到
1faefa44d632065e8bd4fd2a462ed292,再加上分片数量-2,就是你看到的实际ETag。
- 你预期的是单分片上传的ETag:
- 5242881字节文件:大于分片大小,应用正确分成两个分片(5242880 + 1字节),ETag计算符合预期。
你忽略的要点
- 应用的分片上传逻辑存在bug:当文件大小恰好是分片大小的整数倍时,错误地新增了一个空分片。正常情况下,文件大小等于分片大小应该只生成一个分片,或直接使用单块上传。
- 单块上传和分片上传的ETag逻辑差异:即使文件大小等于分片大小,选择单块上传会得到无后缀的MD5;选择分片上传(单分片)会得到MD5加
-1,但你的应用错误地触发了双分片上传。
内容的提问来源于stack exchange,提问作者EricD
相关产品推荐
相关产品推荐

