推荐职位: Amazon S3 & Checksum, How to encode md5 sum into base64 in BASH
我必须从S3 bucket下载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(?)**
如果我的理解错了,请改正。我正在寻找一种以编程方式捕获头数据的方法
当boto使用任何
get_contents_to_*
方法下载文件时,它将计算下载字节的MD5校验和,并将其作为Key
对象的md5
属性提供。此外,S3在响应中发送一个ETag
头,表示服务器对MD5校验和的概念。这可以作为Key
对象的etag
属性使用。所以,在下载一个文件之后,您可以比较这两个属性的值,看看它们是否匹配。如果您想知道S3认为MD5是什么而不实际下载文件(如您的示例所示),可以这样做:
如果文件是在运行多部分上载之后组装的,则ETag似乎已经很好地确定不是md5sum。我认为在这种情况下,唯一的办法就是下载文件并在本地执行校验和。如果结果正确,那么S3副本必须是好的。如果本地校验和错误,则s3副本可能不正确,或者下载可能失败。如果你不再有md5sum的原始文件或记录,我认为你已经失去了运气。如果组装好的文件的md5sum可用,或者如果有一种方法可以本地计算要通过多部分上载的文件的预期etag,那就太好了。
相关问题 更多 >
编程相关推荐