簡體   English   中英

如何使用boto獲取亞馬遜上的密鑰/文件的校驗和?

[英]How to get the checksum of a key/file on amazon using boto?

我正在編寫兩個python腳本,它們將在Amazon S3中將文件從一個存儲桶移動到另一個存儲桶,然后驗證已移動的密鑰的內容。 在傾倒了他們的鍵類boto,並查看了這個 stackoverflow問題后,我發現了在復制文件后如何通過“etag”拉取校驗和。

但是,這只有在文件被下載/上傳時才有效,因為驗證將由完全不同的腳本完成,我需要幫助從文件中獲取etag而不實際下載它。

目前,工作流程為:文件1通過存儲桶並使用boto復制所有密鑰,然后打印輸出鍵的路徑,后跟其etag。 (buckets []是源和目標)這很好用:

inbuck = conn.get_bucket(buckets[0])                                          
outbuck = conn.get_bucket(buckets[1])                                         
for inkey in inbuck.list():                                                   
    print buckets[1] + ";;" + inkey.key + ";;" + inkey.etag.replace("\"","")  
    out = Key(outbuck)                                                        
    out.key = inkey.key                                                       
    inkey.copy(outbuck,out.key,preserve_acl=True)                             

然后,文件2從文件1中讀取輸出,檢查密鑰是否存在,然后應該在目標中獲取密鑰的etag,以與輸入的內容進行比較。 但是,密鑰的etag始終為None,因為它未下載。

dstbuck = conn.get_bucket(destination[0])
dstkey = Key(dstbuck)               
dstkey.key = destination[1]    

if dstkey.exists() and dstkey.etag.replace("\"","") == destination[2]:
    PASSED.append(dstkey.key)
else:
    FAILED.append(dstkey.key)

程序崩潰,因為dstkey.etag為“None”。 有人知道解決這個問題嗎?

問題是你只是創建一個本地Key對象。 沒有從S3檢索有關密鑰的信息。 嘗試這樣的事情:

dstbuck = conn.get_bucket(destination[0])
dstkey = bucket.get_key(destination[1])
if dstkey is None:
    FAILED.append(destination[1])
else:
    # do etag check here

這樣,Key對象應該具有S3中關於對象的數據。 get_key方法使用HTTP HEAD請求,因此不會檢索對象的主體,只檢索標頭。

此外,如果存儲桶名稱(即destination [0])對於給定的程序運行始終相同,則無需為存儲桶中的每個關鍵對象執行get_bucket

暫無
暫無

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

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