【问题标题】:How/when to calculate md5 hash of s3 uploads using Boto library如何/何时使用 Boto 库计算 s3 上传的 md5 哈希
【发布时间】:2014-12-10 00:32:11
【问题描述】:

boto/s3 模块中有一个名为set_contents_from_filename 的函数,它似乎将md5 哈希作为参数。

但文档并不清楚何时/如何计算哈希值。有人可以帮我解决这个问题吗?另外,如何将哈希信息保存到文件中?

【问题讨论】:

    标签: python amazon-s3 boto


    【解决方案1】:

    set_contents_from_filename 方法会自动为您计算 MD5 校验和。此方法有一个可选的md5 参数,如果您已经在应用程序中出于某种原因计算了 MD5,则可以传入该参数,但如果您没有传入值,boto 将为您计算它。

    【讨论】:

    • 当我记录日志文件时,这就是我所拥有的" DEBUG: Headers: {'x-amz-meta-host_name': 'xp-vm', 'Content-Length': '35250 ','期望':'100-继续','Content-MD5':'dzci3KDIAPWMdzWDaBaaJg==','Content-Type':'application/octet-stream','User-Agent':'Boto/2.6.0 -dev (win32)'}" 。 content-md5 是 md5 值吗?对于我在控制台中执行 md5 时的同一个文件,我的值为“dde831f630d056bb79d7d236f52135ff”
    • 就是boto计算出来的MD5。通过在请求中发送 MD5,这意味着 S3 可以计算它接收到的 MD5,如果它们不匹配,S3 将返回一个错误,表明该过程中某些内容已损坏。这是一项重要的完整性检查。我不知道为什么 MD5 在控制台中似乎有所不同。唯一的原因可能是内容本身由于某种原因而不同。我相信boto的MD5计算是正确的。
    【解决方案2】:

    正如@garnatt 已经说过的,set_contents_from_filename 方法会自动为您计算 MD5 校验和。

    如果您查看文档,有一个名为 compute_md5 的方法返回一个元组,该元组包含十六进制摘要中的 MD5 校验和(您使用 md5sum 在控制台中获得的内容)以及它发送到亚马逊的 base64 编码这就是您在标题中看到的内容。

    set_contents_from_filename 方法中的md5 参数采用元组格式的MD5 校验和,与compute_md5 返回的方式相同。如果需要手动计算,最好的方法是使用compute_md5方法。否则,您必须在将元组传递给md5 参数之前以正确的格式构建元组。

    【讨论】:

      【解决方案3】:

      boto计算的MD5是校验和的base 64编码。要上传/已上传的给定文件的标头中的“Content-MD5”可以通过以下方式计算:

      import hashlib, base64
      conn = S3Connection(access_key, secret_key)
      bucket = conn.get_bucket('bucket_name')
      #If you want to calculate MD5 of a file already uploaded
      obj_key = bucket.get_key('file_name_in_s3')
      content = obj_key.get_contents_as_string()
      m = hashlib.md5()
      m.update(content)
      value = m.digest()
      remote_md5 = base64.b64encode(value)
      
      #To calculate md5 of a file to be uploaded to S3
      cur_md5 = base64.b64encode(hashlib.md5(open('Local/Path/To/File').read()).digest())
      

      【讨论】:

        猜你喜欢
        • 2012-04-14
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2010-10-20
        • 2011-12-08
        • 2011-06-06
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多