我需要將amazon S3上的大文件(> 5GB)與boto一起移動到同一個存儲桶中。爲此,我需要使用multipart API,它不使用md5作爲etags的總和。如何檢查亞馬遜S3上的兩個大文件是否相同?
儘管我認爲(只有98%肯定)我的代碼是正確的,但我想驗證新副本在刪除原始文件之前是否損壞。但是我找不到任何方法,除了下載這兩個對象並在本地進行比較,對於5GB +文件來說這是一個相當長的過程。
爲了記錄,以下是我的代碼複製一個大的文件與博託,也許這可以幫助某人。如果我的問題沒有好的解決方案,也許有人會發現一個錯誤,並防止我破壞數據。
import boto
copy_size = 1000000000 #1e9
bucket_name = 'mybucket'
orig_key_name = 'ABigFile'
dest_key_name = 'ABigFile.clone'
s3 = boto.connect_s3()
mybucket = s3.get_bucket(bucket_name)
key = mybucket.get_key(orig_key_name)
mp = mybucket.initiate_multipart_upload(dest_key_name) #keyname
print 'key size: ', key.size
count = 1
start = 0
end = -1
while end < key.size-1:
print 'count: ', count
start = end + 1
end = min(key.size -1 , start + copy_size)
mp.copy_part_from_key(bucket_name, orig_key_name, count , start, end)
count+=1
mp.complete_upload()
此代碼僅適用於原始密鑰大小> = 5368709121字節。
測試兩個小~1kB文件。 – istruble 2012-02-11 00:02:52
@istruble:好吧,多部分只適用於5BM +塊。但是,我仍然只能測試幾個文件,並希望亞馬遜部分沒有任何錯誤,並且我的測試是詳盡的。 – ascobol 2012-02-11 08:20:58
謝謝。我今天學了些新東西。 – istruble 2012-02-13 16:49:47