我正在尝试使用新的boto3客户端为AWS执行“hello world”。如何使用boto3将S3对象保存到文件中
我使用的用例很简单:从S3获取对象并将其保存到文件中。
在博托2.X我会做这样的:
import boto
key = boto.connect_s3().get_bucket('foo').get_key('foo')
key.get_contents_to_filename('/tmp/foo')
在博托3。我无法找到一个干净的方式做同样的事情,所以我手动遍历“流”对象:
import boto3
key = boto3.resource('s3').Object('fooo', 'docker/my-image.tar.gz').get()
with open('/tmp/my-image.tar.gz', 'w') as f:
chunk = key['Body'].read(1024*8)
while chunk:
f.write(chunk)
chunk = key['Body'].read(1024*8)
或
import boto3
key = boto3.resource('s3').Object('fooo', 'docker/my-image.tar.gz').get()
with open('/tmp/my-image.tar.gz', 'w') as f:
for chunk in iter(lambda: key['Body'].read(4096), b''):
f.write(chunk)
,它工作正常。我想知道是否有任何“本地”boto3功能,将执行相同的任务?
@Daniel:感谢您的答复。如果我想在boto3上传使用分段上传的文件,你能回复答案吗? – 2015-11-02 07:16:27
@RahulKumarPatle'upload_file'方法会自动使用分段上传来处理大文件。 – Daniel 2015-11-03 16:26:09
@Daniel - 关于multipart_upload,我创建了一个[SO问题](http://stackoverflow.com/questions/34303775/complete-a-multipart-upload-with-boto3)。 'upload_file'方法似乎不会自动使用分段上传来处理超过'multipart_threshold'配置的文件大小;至少,我还没有能够以这种方式工作。我很想做错!任何帮助是极大的赞赏。 – blehman 2015-12-16 16:47:33