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

标签 python python-2.7 amazon-s3 md5 boto

引用帖子: Amazon S3 & Checksum , How to encode md5 sum into base64 in BASH

我必须从具有受限访问权限的 S3 存储桶下载一个 tar 文件。 [ 大部分访问权限仅授予下载 ]

下载后,我必须检查下载文件的 md5 校验和与 S3 中作为元数据存在的数据的 MD5 校验和

我目前使用 S3 文件浏览器手动记下内容 header 的“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(?)**

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

最佳答案

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

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

for key_val in rs_keys:
    print key_val, key_val.etag

关于python - 如何使用 boto 以编程方式获取 Amazon S3 文件的 MD5 校验和,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16872679/

相关文章:

ruby-on-rails - 如何使用 Active Storage Rails 上传到采用 AES256 加密(服务器端加密)的 AWS S3 存储桶?

amazon-web-services - 如何在 EC2 上的 docker 内使用 AWS 凭证运行命令?

python - macOS 上的 virtualenv 使用不存在的 python 解释器

html - 无法获取表格数据 - HTML

WinXP 中的 Python setuptools 退出安装并出现无信息错误

node.js - 解压/解压缩到 Node 中的流

python - 让 bash 脚本将多个程序作为单独的进程执行

Python正则表达式查找独立案例

python - openCV 中的轮廓匹配形状

java - Eclipse/PyCharm 中的 jython 设置