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)
如果我的理解是错误的,请更正.我正在寻找一种以编程方式捕获标头数据的方法
当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)
小智 6
似乎已经确定,如果文件在运行多部分上载后组装,则ETag不是md5sum.我认为在这种情况下,唯一的办法就是下载文件并在本地执行校验和.如果结果正确,则S3副本必须良好.如果本地校验和错误,则s3副本可能不正确,或者下载可能已失败.如果你不再拥有原始文件或md5sum的记录,我认为你运气不好.这将是巨大的,如果安装文件的md5sum也可用,或者如果有一种方法来计算本地文件的预期ETAG通过多上传.