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

2024-06-28 11:02:03 发布

您现在位置:Python中文网/ 问答频道 /正文

推荐职位: Amazon S3 & ChecksumHow 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(?)**

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


Tags: 文件数据方法keyins3bucket编程
2条回答

当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可用,或者如果有一种方法可以本地计算要通过多部分上载的文件的预期etag,那就太好了。

相关问题 更多 >