2009-09-23 8 views

risposta

2

S3 consente la copia dell'oggetto per oggetto. L'operazione CopyObject crea una copia di un oggetto quando si specifica la chiave e il bucket di un oggetto di origine e la chiave e il bucket di una destinazione di destinazione. Non sono sicuro se boto abbia un'implementazione compatta.

4

Navigazione attraverso il codice sorgente di boto Ho scoperto che l'oggetto chiave ha un metodo di "copia". Grazie per il tuo suggerimento sull'operazione CopyObject.

+0

Guida sul metodo di copia nel modulo boto.s3.key: 'copia (self, dst_bucket, dst_key, metadati = Nessuno, reduced_redundancy = False, preserve_acl = False, ENCRYPT_KEY = False)' del boto. s3.key.Key instance Copia questa chiave in un altro bucket. –

14

Dove secchio è il secchio destinazione:

bucket.copy_key(new_key,source_bucket,source_key) 
+1

In realtà legge la chiave e la inserisce nel nuovo bucket, che non è quello che desideri. Scusate. –

+0

Non credo che sia accurato. Questa è la migliore risposta IMO. Il metodo 'copy_key' passa l'intestazione' x-amz-copy-source' in una richiesta PUT, che dice a S3 di copiare direttamente da una regione all'altra, senza scaricare sul tuo computer. – sergiopereira

+0

Ecco i documenti: http://boto.cloudhackers.com/en/latest/ref/s3.html#boto.s3.bucket.Bucket.copy_key – creimers

2

Anche se nessuno ha chiesto, ho pensato che potrebbe essere rilevante per mostrare come fare questo con simples3:

>>> b.copy("my_bucket/file.txt", "file_copy.txt", acl="public") 

io non sono sicuro di quello che Boto fa qui, ma vale la pena notare che le autorizzazioni (ACL) saranno non da copiare da S3, verrà ripristinato su "privato" se non viene specificato nient'altro. Per copiare l'ACL, devi prima chiederlo.

+0

I secondo questo commento riguardante le autorizzazioni (dopo aver incontrato un bug) 'dest_bucket .copy_key (key.name, src_bucket_name, key.name, preserve_acl = True) ' – nsof

0

Si noti che il metodo "copia" sull'oggetto chiave ha un parametro "preserve_acl" (False per impostazione predefinita) che copierà l'ACL dell'origine sull'oggetto di destinazione.

9
from boto.s3.key import Key 

#Get source key from bucket by name 
source_key = source_bucket.get_key(source_key_name) 

#Copy source key to a new bucket with a new key name (can be the same as source) 
#Note: source_key is Key 
source_key.copy(dest_bucket_name,dest_key_name) 

#The signature of boto's Key class: 
def copy(self, dst_bucket, dst_key, metadata=None, 
      reduced_redundancy=False, preserve_acl=False, 
      encrypt_key=False, validate_dst_bucket=True) 

#set preserve_acl=True to copy the acl from the source key 
Problemi correlati