使用GetObject下载分段上传的S3对象后如何在客户端验证校验和?
使用S3 GetObject验证分段上传对象的完整性
方法1:用S3内置的整体校验和(最省心)
别误以为ChecksumMode='ENABLED'只适用于单分段对象——只要你在分段上传阶段做了配置,它同样能用:
- 发起
CreateMultipartUpload请求时,带上ChecksumAlgorithm参数(比如选SHA256),S3会在你调用CompleteMultipartUpload完成上传后,自动计算整个对象的校验和并存储。 - 下载时在
GetObject里设置ChecksumMode='ENABLED',响应头会返回x-amz-checksum-sha256这类字段,就是整个对象的校验和。 - 你把下载下来的文件在本地算一遍同算法的校验和,和响应头里的值对比就行。
方法2:自己存整体校验和到元数据
如果上传时没配置S3自动算,那你可以提前自己算好:
- 上传前先把本地完整文件的校验和(比如SHA256)算出来,在上传时把这个值塞进对象的自定义元数据里,比如用
x-amz-meta-checksum-sha256这个字段。 - 下载对象的时候,顺便把这个自定义元数据拿出来。
- 下载完本地文件再算一遍校验和,和元数据里的对比。
方法3:用分段校验和兜底
要是前面两种都没做,也能靠分段的校验和来验证:
- 分段上传的时候,你肯定记录了每个分段的校验和(如果上传时提供了的话)或者ETag。
- 下载完整对象后,按照当时的分段大小把本地文件拆成对应片段,逐个计算每个片段的校验和,和之前记录的分段校验和一一比对。
- 注意:S3返回的分段ETag不是单纯的分段MD5,是把分段内容的MD5拼接后再MD5,最后加上分段数的结果,所以用ETag验证的话得按这个规则来算。
内容的提问来源于stack exchange,提问作者Anirudh Jayakumar
相关产品推荐
相关产品推荐

