Amazon s3 S3中是否有用于存储大型对象MD5SUM的标准元数据密钥?

Amazon s3 S3中是否有用于存储大型对象MD5SUM的标准元数据密钥?,amazon-s3,Amazon S3,S3支持为ETag标题中的大多数对象返回MD5SUMMS。但是,对于已分块上传的对象,ETag不再是MD5SUM-它仍然可以用于检查完整性,但我确实需要MD5SUM 我希望将MD5SUM存储在对象元数据中,以便在大型对象上轻松检索它。然而,在我为这一点编一个密钥之前——其他软件使用的是标准密钥吗?坦白说,我没有能够识别的标准,有太多为S3编写的软件做得不是很好——S3提供了类似Content-MD5upload头这样的机制,确保S3会断然拒绝在传输过程中损坏的上传。。。有些开发人员似乎并不在意这

S3支持为
ETag
标题中的大多数对象返回MD5SUMMS。但是,对于已分块上传的对象,
ETag
不再是MD5SUM-它仍然可以用于检查完整性,但我确实需要MD5SUM


我希望将MD5SUM存储在对象元数据中,以便在大型对象上轻松检索它。然而,在我为这一点编一个密钥之前——其他软件使用的是标准密钥吗?

坦白说,我没有能够识别的标准,有太多为S3编写的软件做得不是很好——S3提供了类似
Content-MD5
upload头这样的机制,确保S3会断然拒绝在传输过程中损坏的上传。。。有些开发人员似乎并不在意这一点,所以无论如何,这个先例可能不值得遵循

但我在多个层面上都在努力解决这个问题

但是,请注意,如果您知道上载过程中使用的部件大小,则可以从本地文件计算S3上载的S3多部件etag(同样,它需要一个标准头来保存此信息,否则如果您不保留或使用标准值,则会丢失此信息)。如果每个部分都以二进制(不是十六进制)连接起来,那么就使用md5,使用md5(这次是十六进制)加上
-
加上部分的数量,瞧,您有多部分etag

我的(未发布,内部使用)工具滑稽地命名为“pedantic uploader”,使用x-amz-meta-content-md5hex存储整个文件的十六进制编码md5,以及使用x-amz-meta-content-sha256hex存储sha256。我最初使用的是x-amz-meta-content-md5,但由于它可能是base64编码的,所以这可能是不明确的

如果对象使用
Content Encoding:gzip
,那么gzip中的有效负载属性也会通过我的代码记录在元数据中,键为x-amz-meta-identity-Content-md5hex,未压缩字节计数为x-amz-meta-identity-Content-length,“identity”表示压缩前未编码的有效负载。我将上传部分大小以字节为单位存储为x-amz-meta-multipart-part-size,由于我预先计算了S3也应该为etag生成什么,所以将其保存为x-amz-meta-expect-etag


不确定这是否有帮助。

我还没有能够确定的标准,坦率地说,为S3编写的太多软件做得不是很好——S3提供了类似
Content-MD5
upload头这样的机制,确保S3会断然拒绝传输中损坏的上传。。。有些开发人员似乎并不在意这一点,所以无论如何,这个先例可能不值得遵循

但我在多个层面上都在努力解决这个问题

但是,请注意,如果您知道上载过程中使用的部件大小,则可以从本地文件计算S3上载的S3多部件etag(同样,它需要一个标准头来保存此信息,否则如果您不保留或使用标准值,则会丢失此信息)。如果每个部分都以二进制(不是十六进制)连接起来,那么就使用md5,使用md5(这次是十六进制)加上
-
加上部分的数量,瞧,您有多部分etag

我的(未发布,内部使用)工具滑稽地命名为“pedantic uploader”,使用x-amz-meta-content-md5hex存储整个文件的十六进制编码md5,以及使用x-amz-meta-content-sha256hex存储sha256。我最初使用的是x-amz-meta-content-md5,但由于它可能是base64编码的,所以这可能是不明确的

如果对象使用
Content Encoding:gzip
,那么gzip中的有效负载属性也会通过我的代码记录在元数据中,键为x-amz-meta-identity-Content-md5hex,未压缩字节计数为x-amz-meta-identity-Content-length,“identity”表示压缩前未编码的有效负载。我将上传部分大小以字节为单位存储为x-amz-meta-multipart-part-size,由于我预先计算了S3也应该为etag生成什么,所以将其保存为x-amz-meta-expect-etag


不确定这是否有帮助。

在大文件上使用
Content-MD5
时,ETag是否与文件md5sum不匹配?文档()似乎暗示您可以依赖ETag:“此外,您可以在将对象放入Amazon S3时计算MD5,并将返回的ETag与计算出的MD5值进行比较。”根据这些文档,回答我自己的问题:您不能依赖ETag值作为文件md5sum。我想我的下一个问题是,你可以使用put object进行多部分上传吗?@htaccess是的,如果你使用
put
upload,从你引用的链接来看,它确实匹配,但这种特殊功能仅限于文件,我不知道为什么没有记录ETag在多部分上传上的实际工作方式,但它的运作方式多年来一直没有改变,而且似乎不太可能改变。我一直使用这种逻辑,而且它一直有效。还有一个未记录的API调用,允许您稍后了解多部分上载的部分大小:
HEAD/object key?partNumber=n
,如果我没记错的话,行为就像您发送了一个范围请求,允许您了解原始上载部分的大小。@Michael,非常感谢您知道触发此问题的大小。当您在大文件上使用
Content-MD5
时,ETag是否与文件md5sum不匹配?文档()似乎暗示您可以依赖ETag:“此外,您可以在将对象放入Amazon S3时计算MD5,并将返回的ETag与计算出的MD5值进行比较。”根据这些文档,回答我自己的问题:您不能依赖ETag值作为文件md5sum。我想我的下一个问题是,你能使用put对象进行多部分上传吗?@htaccess是的,如果你使用
put