繁体   English   中英

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

[英]How to programmatically get the MD5 Checksum of Amazon S3 file using boto

推荐帖子: 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(?)**

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

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

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

for key_val in rs_keys:
    print key_val, key_val.etag

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM