7

参考帖子: Amazon S3 & Checksum如何在 BASH 中将 md5 sum 编码为 base64

我必须从访问受限的 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(?)**

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

4

2 回答 2

9

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

如果您想知道 S3 认为 MD5 是什么而不实际下载文件(如您的示例所示),您可以这样做:

for key_val in rs_keys:
    print key_val, key_val.etag
于 2013-06-01T15:37:38.507 回答
6

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

于 2013-07-12T03:36:26.227 回答