【问题标题】:How to programmatically get the MD5 Checksum of Amazon S3 file using boto如何使用 boto 以编程方式获取 Amazon S3 文件的 MD5 校验和
【发布时间】:2016-04-13 15:21:28
【问题描述】:

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

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

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

【问题讨论】:

    标签: python python-2.7 amazon-s3 md5 boto


    【解决方案1】:

    当 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 值似乎与 Computed MD5 校验和不匹配。我在引用的帖子中也确实看到 etag 不是 MD5 的合适值。 “x-amz-meta-md5”是我的 S3 文件浏览器中为我提供 MD5 值的键。但是,此密钥在以编程方式获取的元数据或内容标头中不可用。
    • etag 属性的格式为"797cc49509a9df16481fac4fae144e0a",而md5 属性的格式为797cc49509a9df16481fac4fae144e0a。注意etag 中的双引号。在比较值时,您需要考虑到这一点。 x-amz-meta-md5 键不是标准 S3 元数据值,而是自定义值。可能是 S3 文件浏览器添加的?
    • 另一条评论。我查看了 boto 源代码并确认 boto 在下载文件时会自动检查 etag 标头的值和计算出的 md5。如果它们不匹配,它将引发S3DataError 异常。
    • 我们在成功下载文件但下载的文件已损坏时遇到问题。希望大家参考boto中的如下代码: FileName: boto / boto / s3 / resumable_download_handler.py code self.etag_value_for_current_download = f.readline().rstrip('\n') ** #我们曾经匹配一个基于 MD5 的正则表达式,以确保 etag # 正确读取。由于 ETag 不需要是 MD5,我们现在做一个简单的 #length 完整性检查。 code请确认是否有其他文件对下载的文件进行md5校验
    • ETag 对于 MD5 校验和来说是可靠的!来自the S3 Documentation: "The ETag may or may not be an MD5 digest of the object data."。请参阅this Stack Overflow answer 了解更多详情。
    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-12-12
      • 2013-04-10
      • 1970-01-01
      • 2013-04-29
      • 2023-04-03
      • 1970-01-01
      • 2010-09-23
      • 1970-01-01
      相关资源
      最近更新 更多