2013-06-01 7 views
7

呼ば投稿を使用してAmazon S3のファイルのMD5チェックサムを取得する方法: Amazon S3 & ChecksumHow to encode md5 sum into base64 in BASHプログラムでのboto

私はアクセスが制限されたS3バケットからtarファイルをダウンロードする必要があります。私は私が現在使用してS3

内のメタデータとして存在するデータのMD5チェックインサムに対するダウンロードしたファイルのMD5チェックサムをチェックする必要がダウンロードした後

を[ほとんどアクセス権限のみをダウンロードするように与えられました] S3ファイルブラウザを使用して、コンテンツヘッダーの "x-amz-meta-md5"を手動で書き留め、ダウンロードしたファイルの計算されたmd5に対してその値を検証します。

botoを使用してS3ファイルのmd5ハッシュ値をメタデータとして記述するプログラム的な方法があるかどうかを知りたいと思います。

from boto.s3.connection import S3Connection 

conn = S3Connection(access_key, secret_key) 
bucket=conn.get_bucket("test-bucket") 
rs_keys = bucket.get_all_keys() 
for key_val in rs_keys: 
    print key_val, key_val.**HOW_TO_GET_MD5_FROM_METADATA(?)** 

私の理解が間違っている場合は、訂正してください。私はKeyオブジェクトのmd5属性としてのbotoがget_contents_to_*のいずれかの方法を使用してファイルをダウンロードすると、それはそれはダウンロードしたバイトのMD5チェックサムを計算し、それが利用できるようにするプログラムで

答えて

9

をヘッダデータをキャプチャする方法を探しています。さらに、S3は応答の中にMD5チェックサムが何であるかというサーバーの考えを表すETagヘッダーを応答として送信します。これはKeyオブジェクトのetag属性として利用できます。したがって、ファイルをダウンロードした後は、それらの2つの属性の値を比較して、それらが一致するかどうかを調べることができます。

あなたは(あなたの例のように)S3は、MD5は、実際にファイルをダウンロードすることなく、ある考えるものを知りたい場合は、単にこれを行うことができます:

for key_val in rs_keys: 
    print key_val, key_val.etag 
+2

提案していただきありがとうございます。 Etag値がComputed MD5チェックサムと一致していないようです。私は、引用された記事で、etagはMD5の適切な値ではないことも見てきました。 "x-amz-meta-md5"は私のS3ファイルブラウザのキーで、私にMD5値を与えます。しかし、このキーは、プログラマチックに取得されるメタデータまたはコンテンツヘッダーでは使用できません。 – user1652054

+3

'' etag''属性は '' "797cc49509a9df16481fac4fae144e0a" ''の形式になり、 '' md5''属性は '' 797cc49509a9df16481fac4fae144e0a''になります。 '' etag''を囲む二重引用符に注意してください。値を比較するときは、これを考慮する必要があります。 '' x-amz-meta-md5''キーは標準的なS3メタデータ値ではなくカスタムのものです。おそらくそれはS3ファイルブラウザによって追加されたでしょうか? – garnaat

+5

もう1つのコメント。私はbotoのソースコードを見て、ファイルをダウンロードするときにbotoが '' md5''を使って '' etag''ヘッダーの値を自動的にチェックすることを確認しました。一致しない場合、 '' S3DataError''例外が発生します。 – garnaat

6

これはよくETagのではないことが確立されそうですマルチパートアップロードを実行した後にファイルがアセンブルされた場合のmd5sumその場合、ファイルをダウンロードしてローカルでチェックサムを実行することが唯一の手段だと思います。結果が正しい場合は、S3コピーが良好でなければなりません。ローカルチェックサムが間違っていると、s3コピーが不良であるか、ダウンロードが失敗した可能性があります。もはや元のファイルやmd5sumのレコードを持っていない場合、あなたは運が悪いと思います。アセンブルされたファイルのmd5sumが利用可能だった場合、またはマルチパートを介してアップロードされるファイルの予想されるエタグをローカルで計算する方法がある場合は、素晴らしいでしょう。

関連する問題