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

时间:2013-06-01 12:23:10

标签: python python-2.7 amazon-s3 md5 boto

推荐帖子:     Amazon S3 & Checksum,     How to encode md5 sum into base64 in BASH

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

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

我目前使用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(?)**

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

2 个答案:

答案 0 :(得分: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

答案 1 :(得分:6)

如果文件是在运行多部分上传后组装的,那么ETag似乎不是md5sum。我认为在这种情况下,唯一的办法就是下载文件并在本地执行校验和。如果结果正确,则S3副本必须良好。如果本地校验和错误,则s3副本可能不正确,或者下载可能已失败。如果你不再拥有原始文件或md5sum的记录,我认为你运气不好。如果汇编文件的md5sum可用,或者有一种方法可以在本地计算要通过multipart上传的文件的预期etag,那将会很棒。