我正在編寫兩個python腳本,它們將在Amazon S3中將文件從一個存儲桶移到另一個存儲桶,然後驗證已移動的密鑰的內容。在倒了他們以後,他們的關鍵類boto,並看着this stackoverflow的問題,我已經找到了如何通過文件被複制後的「etag」拉校驗和。如何使用boto獲取亞馬遜上的密鑰/文件的校驗和?
但是,這隻適用於文件被downlaoded /上傳,因爲驗證將由完全不同的腳本來完成,我需要從文件中獲取etag而不需要實際下載它。
目前,工作流程如下: 文件一通過一個存儲桶並使用boto複製所有密鑰,然後打印輸出密鑰後跟etag的路徑 。 (桶[]爲源和目的地)這工作正常:
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)
文件中的兩個,然後讀取文件中的一個輸出,檢查該鍵存在,然後應該拿到鑰匙的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」,程序崩潰。 有沒有人知道解決這個問題的方法?
事實上,這是解決方案,謝謝。 – Martinnj