Sto provando a fare un "ciao mondo" con il nuovo client boto3 per AWS.Come salvare l'oggetto S3 in un file utilizzando boto3
Il caso d'uso che ho è abbastanza semplice: ottenere l'oggetto da S3 e salvarlo nel file.
In boto 2.X vorrei fare in questo modo:
import boto
key = boto.connect_s3().get_bucket('foo').get_key('foo')
key.get_contents_to_filename('/tmp/foo')
In boto 3. Non riesco a trovare un modo pulito per fare la stessa cosa, quindi sono manualmente l'iterazione sopra l'oggetto "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)
o
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)
e funziona benissimo. Mi chiedevo se ci fosse una funzione "nativa" di boto3 che farà lo stesso compito?
@ Daniel: Grazie per la risposta. Puoi rispondere alla domanda se voglio caricare il file utilizzando il caricamento multipart in boto3. –
@RahulKumarPatle il metodo 'upload_file' utilizzerà automaticamente caricamenti multipart per file di grandi dimensioni. – Daniel
@Daniel - Riguardo a multipart_upload, ho creato una [domanda SO] (http://stackoverflow.com/questions/34303775/complete-a-multipart-upload-with-boto3). Il metodo 'upload_file' non sembra utilizzare automaticamente il caricamento multipart per dimensioni di file che superano la configurazione' multipart_threshold'; almeno, non sono stato in grado di farlo funzionare in quel modo. Mi piacerebbe essere sbagliato! Qualsiasi aiuto è molto apprezzato. – blehman