Я пытаюсь сделать «привет мир» с новым клиентом boto3 для AWS.Как сохранить объект S3 в файл с помощью boto3
Использование прецедента у меня довольно просто: получить объект из S3 и сохранить его в файле.
В Boto 2.X я хотел бы сделать это следующим образом:
import boto
key = boto.connect_s3().get_bucket('foo').get_key('foo')
key.get_contents_to_filename('/tmp/foo')
В Бото 3. Я не могу найти чистый способ сделать то же самое, так что я вручную итерацию над объектом «Streaming»:
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: Спасибо за Ваш ответ. Можете ли вы ответить на ответ, если я хочу загрузить файл, используя multipart upload в boto3. –
@RahulKumarPatle метод 'upload_file' автоматически будет использовать многостраничные загрузки для больших файлов. – Daniel
@ Daniel - Что касается multipart_upload, я создал [SO question] (http://stackoverflow.com/questions/34303775/complete-a-multipart-upload-with-boto3). Метод 'upload_file', как представляется, автоматически не использует многостраничную загрузку для размеров файлов, превышающих конфигурацию' multipart_threshold'; по крайней мере, я не смог заставить его работать таким образом. Я хотел бы ошибаться! Любая помощь приветствуется. – blehman