推荐帖子:Amazon S3 & Checksum,How to encode md5 sum into base64 in BASH
我必须从S3存储桶下载一个有限访问的tar文件。大多数情况下,访问权限仅授予下载
下载后,我必须根据S3中元数据形式存在的数据的md5校验和来检查下载文件的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(?)**如果我的理解有误,请纠正。我正在寻找一种以编程方式捕获头数据的方法
发布于 2013-06-01 23:37:39
当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发布于 2013-07-12 11:36:26
如果文件是在运行多部分上传之后组装的,那么ETag不是md5sum,这一点似乎得到了很好的证实。我认为在这种情况下,唯一的办法就是下载文件并在本地执行校验和。如果结果正确,则S3副本一定是正确的。如果本地校验和错误,则s3副本可能已损坏,或者下载可能已失败。如果您不再拥有原始文件或其md5sum的记录,我认为您就不走运了。如果汇编的文件的md5sum可用,或者如果有一种方法可以本地计算要通过multipart上传的文件的预期etag,那就太好了。
https://stackoverflow.com/questions/16872679
复制相似问题