boto/s3モジュールには、パラメーターとして md5 ハッシュを使用するように見える関数が呼び出されset_contents_from_filename
ています。
しかし、ドキュメントはハッシュをいつ/どのように計算するかについて明確ではありません。誰かがこれで私を助けてくれますか? また、ハッシュ情報をファイルに保存するにはどうすればよいですか?
@garnatt が既に述べたように、このset_contents_from_filename
メソッドは MD5 チェックサムを自動的に計算します。
ドキュメントを見るとcompute_md5
、MD5 チェックサムを含むタプルを 16 進ダイジェスト (を使用してコンソールで取得したものmd5sum
) と、ヘッダーに表示されている Amazon に送信する base64 エンコードを含むタプルを返すというメソッドがあります。
メソッドのmd5
パラメーターはset_contents_from_filename
、MD5 チェックサムをタプル形式で受け取り、同じ方法でcompute_md5
戻ります。手動で計算する必要がある場合は、メソッドを使用するのが最善のcompute_md5
方法です。それ以外の場合は、md5
パラメーターに渡す前に正しい形式でタプルを作成する必要があります。
このset_contents_from_filename
メソッドは、MD5 チェックサムを自動的に計算します。このメソッドにはオプションのmd5
パラメーターがあり、アプリケーションで何らかの理由で既に MD5 を計算している場合は MD5 を渡すことができますが、値を渡さない場合は boto が計算します。
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())