在boto/s3模块中有一个叫做set_contents_from_filename
的函数,它似乎将md5散列作为参数。如何/何时使用Boto库计算s3上传的md5散列
但是文档不清楚何时/如何计算散列。有人可以帮助我吗?另外,如何将散列信息保存到文件?
在boto/s3模块中有一个叫做set_contents_from_filename
的函数,它似乎将md5散列作为参数。如何/何时使用Boto库计算s3上传的md5散列
但是文档不清楚何时/如何计算散列。有人可以帮助我吗?另外,如何将散列信息保存到文件?
set_contents_from_filename
方法会自动为您计算MD5校验和。这个方法有一个可选的md5
参数,如果你已经在你的应用程序中由于某种原因计算了它,那么你可以传入MD5,但如果你没有传入一个值,boto会为你计算它。
正如@garnatt所说的,set_contents_from_filename
方法会自动为您计算MD5校验和。
如果你看看文档,有一个叫compute_md5
方法,该方法返回一个hexdigest包含MD5校验和的元组(您在使用md5sum
控制台什么获得),也Base64编码,将其传送到Amazon是什么你在标题中看到。
set_contents_from_filename
方法中的md5
参数采用元组格式的MD5校验和,与compute_md5
返回的方式相同。如果您需要手动计算,最好的方法是使用compute_md5
方法。否则,在将其传递给参数md5
之前,必须以正确的格式构建元组。
由boto计算的MD5是校验和的基础64编码。 “内容-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())
当我法日志文件,这是我有“DEBUG:头:{”X- am-meta-host_name':'xp-vm','Content-Length':'35250','Expect':'100-Continue','Content-MD5':'dzci3KDIAPWMdzWDaBaaJg ==','Content-Type' :'application/octet-stream','User-Agent':'Boto/2.6.0-dev(win32)'}“。 content-md5是md5的值吗?对于同一个文件,当我在控制台上执行md5时,我的值是“dde831f630d056bb79d7d236f52135ff” – rakesh
这是由boto计算的MD5。通过在请求中发送MD5,这意味着S3可以计算它接收的MD5,如果它们不匹配,S3将返回一个错误,指示过程中某些内容已损坏。这是一个重要的完整性检查。我不知道为什么MD5在控制台中看起来不同。唯一的原因可能是由于某些原因,内容本身不同。我相信boto的MD5计算是正确的。 – garnaat