如何/何时使用Boto库计算s3上传的md5哈希值

时间:2013-01-18 10:34:45

标签: python amazon-s3 boto

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

但是文档并不清楚何时/如何计算哈希值。有人可以帮我吗?另外,我怎样才能将哈希信息保存到文件中?

2 个答案:

答案 0 :(得分:3)

正如@garnatt所说,set_contents_from_filename方法会自动为你计算MD5校验和。

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

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

答案 1 :(得分:1)

按boto计算的MD5是校验和的基本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())