如何使用boto以编程方式获取Amazon S3文件的MD5校验和

use*_*054 7 python md5 amazon-s3 boto python-2.7

推荐帖子: Amazon S3和Checksum, 如何在BASH中将md5 sum编码为base64

我必须从S3存储桶下载具有有限访问权限的tar文件.[主要是仅下载的访问权限]

下载后,我必须检查下载文件的md5校验和,以及在S3中作为元数据存在的数据的MD5-Check Sum

我目前使用S3文件浏览器手动记录内容标题的"x-amz-meta-md5",并根据下载文件的计算md5验证该值.

我想知道是否有编程方式使用boto捕获S3文件的md5哈希值,如元数据所述.

from boto.s3.connection import S3Connection

conn = S3Connection(access_key, secret_key)
bucket=conn.get_bucket("test-bucket")
rs_keys = bucket.get_all_keys()
for key_val in rs_keys:
    print key_val, key_val.**HOW_TO_GET_MD5_FROM_METADATA(?)**
Run Code Online (Sandbox Code Playgroud)

如果我的理解是错误的,请更正.我正在寻找一种以编程方式捕获标头数据的方法

gar*_*aat 9

当boto使用任何get_contents_to_*方法下载文件时,它会计算下载的字节的MD5校验和,并使其可用作对象的md5属性Key.此外,S3 ETag在响应中发送一个标头,表示服务器对MD5校验和的概念.这可用作对象的etag属性Key.因此,在下载文件后,您只需比较这两个属性的值即可查看它们是否匹配.

如果你想知道什么S3认为MD5没有实际下载文件(如你的例子所示),你可以这样做:

for key_val in rs_keys:
    print key_val, key_val.etag
Run Code Online (Sandbox Code Playgroud)

  • 另一条评论.我查看了boto源代码并确认boto在下载文件时会自动检查带有计算的``md5``的``etag``标头的值.如果它们不匹配,它将引发``S3DataError``异常. (5认同)
  • ``etag``属性的格式为``"797cc49509a9df16481fac4fae144e0a"`````md5``属性为``797cc49509a9df16481fac4fae144e0a``.请注意``etag``中的双引号.在比较值时,您需要考虑到这一点.``x-amz-meta-md5``键不是标准的S3元数据值,而是自定义的.也许这已经被S3 File浏览器添加了? (3认同)
  • 谢谢你的建议.Etag值似乎与Computed MD5校验和不匹配.我在转介的帖子中也看到etag不是MD5的合适值."x-amz-meta-md5"是我的S3文件浏览器中的关键,它为我提供了MD5值.但是,此密钥在以编程方式获取的元数据或内容标头中不可用. (2认同)
  • 成功下载文件但下载的文件已损坏时出现问题.我希望你在boto中引用下面的代码:FileName:boto/boto/s3/resumable_download_handler.py`code`self.etag_value_for_current_download = f.readline().rstrip('\n')**#我们曾经匹配基于MD5的正则表达式,以确保etag#正确读取.由于ETag不必是MD5,我们现在做一个简单的#length sanity check.`code`请确认是否有另一个文件,其中下载的文件是针对md5校验和进行检查的 (2认同)
  • 对于MD5校验和,ETag不可靠**!从[S3文档:"ETag可能是也可能不是对象数据的MD5摘要."](http://docs.aws.amazon.com/AmazonS3/latest/API/RESTCommonResponseHeaders.html).有关更多详细信息,请参阅[此Stack Overflow应答](http://stackoverflow.com/a/19304527/38140). (2认同)

小智 6

似乎已经确定,如果文件在运行多部分上载后组装,则ETag不是md5sum.我认为在这种情况下,唯一的办法就是下载文件并在本地执行校验和.如果结果正确,则S3副本必须良好.如果本地校验和错误,则s3副本可能不正确,或者下载可能已失败.如果你不再拥有原始文件或md5sum的记录,我认为你运气不好.这将是巨大的,如果安装文件的md5sum也可用,或者如果有一种方法来计算本地文件的预期ETAG通过多上传.