簡體   English   中英

如何使用boto以編程方式獲取Amazon S3文件的MD5校驗和

[英]How to programmatically get the MD5 Checksum of Amazon S3 file using boto

推薦帖子: Amazon S3和Checksum如何在BASH中將md5 sum編碼為base64

我必須從S3存儲桶下載具有有限訪問權限的tar文件。 [主要是僅下載的訪問權限]

下載后,我必須檢查下載文件的md5校驗和,以及在S3中作為元數據存在的數據的MD5-Check Sum

我目前使用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(?)**

如果我的理解是錯誤的,請更正。 我正在尋找一種以編程方式捕獲標頭數據的方法

當boto使用任何get_contents_to_*方法下載文件時,它會計算它下載的字節的MD5校驗和,並使其可用作Key對象的md5屬性。 此外,S3在響應中發送一個ETag標頭,表示服務器對MD5校驗和的概念。 這可用作Key對象的etag屬性。 因此,在下載文件后,您只需比較這兩個屬性的值即可查看它們是否匹配。

如果你想知道什么S3認為MD5沒有實際下載文件(如你的例子所示),你可以這樣做:

for key_val in rs_keys:
    print key_val, key_val.etag

似乎已經確定,如果文件在運行多部分上載后組裝,則ETag不是md5sum。 我認為在這種情況下,唯一的辦法就是下載文件並在本地執行校驗和。 如果結果正確,則S3副本必須良好。 如果本地校驗和錯誤,則s3副本可能不正確,或者下載可能已失敗。 如果你不再擁有原始文件或md5sum的記錄,我認為你運氣不好。 如果組裝文件的md5sum可用,或者有一種方法可以本地計算要通過multipart上傳的文件的預期etag,那將會很棒。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM