2013-01-18 2 views

답변

3

set_contents_from_filename 메서드는 자동으로 MD5 체크섬을 계산합니다. 이 방법에 대한 옵션 인 md5이 있습니다.이 매개 변수를 사용하면 응용 프로그램에서 이미 계산 한 경우 MD5를 전달할 수 있지만 값을 전달하지 않으면 boto가 계산합니다.

+0

, 이것은 내가 "DEBUG이 내가 법 로그 파일을 때 : 주어진 파일에 대한 헤더의 '콘텐츠-MD5는'이미 계산할 수 있습니다 업로드/업로드 할 { 'X- '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

+0

boto에 의해 계산 된 MD5입니다. 요청에 MD5를 전송하면 S3에서 수신 한 MD5를 S3에서 계산할 수 있고 일치하지 않으면 S3에서 프로세스에서 손상된 부분이 있음을 나타내는 오류를 반환합니다. 이는 중요한 무결성 검사입니다. MD5가 콘솔에서 왜 다른 것 같아요. 유일한 이유는 콘텐츠 자체가 어떤 이유로 인해 다를 수 있다는 것입니다. boto의 MD5 계산이 정확하다고 확신합니다. – garnaat

3

@ garnatt가 이미 말했듯이 set_contents_from_filename 메서드는 자동으로 MD5 체크섬을 계산합니다.

당신이 문서를 보면, 그것은 무엇을 인 아마존에 전송하는 (당신이 md5sum를 사용하여 콘솔에 얻고 무엇을) 또한 base64 인코딩 hexdigest의 MD5 체크섬을 포함하는 튜플을 반환 compute_md5라는 방법이있다 너의 머리에서 너를 보아라.

set_contents_from_filename 메서드의 md5 매개 변수는 튜플 형식의 MD5 체크섬을 취합니다. compute_md5이 반환합니다. 수동으로 계산해야하는 경우 가장 좋은 방법은 compute_md5 방법을 사용하는 것입니다. 그렇지 않으면 md5 매개 변수에 전달하기 전에 올바른 형식으로 튜플을 빌드해야합니다.

1

boto에 의한 MD5 계산은 체크섬의 기본 64 인 코드입니다. 헤더 :

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())