首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何使用boto以编程方式获取亚马逊S3文件的MD5校验和

如何使用boto以编程方式获取亚马逊S3文件的MD5校验和
EN

Stack Overflow用户
提问于 2013-06-01 20:23:10
回答 2查看 12.5K关注 0票数 7

推荐帖子:Amazon S3 & ChecksumHow to encode md5 sum into base64 in BASH

我必须从S3存储桶下载一个有限访问的tar文件。大多数情况下,访问权限仅授予下载

下载后,我必须根据S3中元数据形式存在的数据的md5校验和来检查下载文件的md5校验和

目前,我使用S3文件浏览器手动记录内容标头的"x-amz-meta- md5“,并根据下载文件的计算出的md5验证该值。

我想知道是否有编程方法使用boto来捕获S3文件的md5散列值,就像前面提到的元数据一样。

代码语言:javascript
复制
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(?)**

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

EN

回答 2

Stack Overflow用户

发布于 2013-06-01 23:37:39

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

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

代码语言:javascript
复制
for key_val in rs_keys:
    print key_val, key_val.etag
票数 9
EN

Stack Overflow用户

发布于 2013-07-12 11:36:26

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

票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16872679

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档