Мне нужно переместить большие файлы (> 5 ГБ) на amazon S3 с boto, из одного и того же контейнера.Для этого мне нужно использовать multipart API, который не использует суммы md5 для etags.
Хотя я думаю (ну, конечно, только на 98%), что мой код верен, я хотел бы убедиться, что новая копия не повреждена перед удалением оригинала.Однако я не смог найти никакого метода, кроме как загрузить оба объекта и сравнить их локально, что для файлов объемом более 5 ГБ - довольно длительный процесс.
Для справки ниже приведен мой код для копирования большого файла с помощью boto, возможно, это может кому-то помочь.Если нет хорошего решения моей проблемы, возможно, кто-то найдет ошибку и не позволит мне испортить данные.
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 байт.