【发布时间】:2013-03-11 10:43:35
【问题描述】:
我需要使用 boto 将亚马逊 S3 上的大文件 (>5GB) 从同一个存储桶移入和移至同一个存储桶。为此,我需要使用 multipart API,它不对 etag 使用 md5 和。
虽然我认为(只有 98% 肯定)我的代码是正确的,但我想在删除原始代码之前验证新副本没有损坏。但是,除了下载这两个对象并在本地比较它们之外,我找不到任何方法,对于 5GB 以上的文件来说,这是一个相当长的过程。
为了记录,下面是我用 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 字节。
【问题讨论】:
-
用两个约 1kB 的小文件进行测试。
-
@istruble:好吧,multipart 仅适用于 5BM+ 块。但是,我仍然只能测试几个文件,并希望亚马逊部分没有任何错误,并且我的测试很详尽。
-
谢谢。我今天学到了一些新东西。
标签: python amazon-s3 large-files multipart boto