2009-09-23 9 views

Antwort

2

S3 ermöglicht Objekt für Objektkopie. Die CopyObject-Operation erstellt eine Kopie eines Objekts, wenn Sie den Schlüssel und den Bucket eines Quellobjekts sowie den Schlüssel und den Bucket eines Zielziels angeben. Nicht sicher, ob Boto eine kompakte Implementierung hat.

4

Durchsuchen von Botos Quellcode Ich fand, dass das Key-Objekt eine "Kopieren" -Methode hat. Vielen Dank für Ihren Vorschlag zum CopyObject-Vorgang.

+0

-Hilfe-Methode Kopie in Modul boto.s3.key: 'Kopie (self, dst_bucket, dst_key, Metadaten = None, reduced_redundancy = False, preserve_acl = False, ENCRYPT_KEY = False)' Methode von Boto. s3.key.Key-Instanz Kopieren Sie diesen Schlüssel in einen anderen Bucket. –

14

Wo Eimer ist das Ziel Schaufel:

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

Das liest tatsächlich den Schlüssel und legt es in den neuen Bucket - was nicht das ist, was Sie wollen. Es tut uns leid. –

+0

Ich glaube nicht, dass das genau ist. Dies ist die beste Antwort IMO. Die 'copy_key'-Methode übergibt den' x-amz-copy-source' -Header in einer PUT-Anfrage, die S3 anweist, direkt von Region zu Region zu kopieren, ohne sie auf Ihren Rechner zu laden. – sergiopereira

+0

Hier sind sie docs: http://boto.cloudhackers.com/en/latest/ref/s3.html#boto.s3.bucket.Bucket.copy_key – creimers

2

Obwohl niemand fragte, dachte ich, es relevant sein könnte, um zu zeigen, wie dies zu tun mit simples3:

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

Ich bin nicht sicher, was Boto macht hier, aber es ist erwähnenswert, dass die Berechtigungen (ACL) nicht von S3 kopiert werden, wird es auf "private" zurückgesetzt, wenn nichts anderes angegeben ist. Um die ACL zu kopieren, müssen Sie zuerst danach fragen.

+0

Ich zweite diesen Kommentar in Bezug auf die Berechtigungen (nach dem Auftreten eines Fehlers) 'dest_bucket .copy_key (Schlüssel.Name, Name_des_Src_Buches, Schlüssel.Name, Erhalt_Schl = Wahr) ' – nsof

0

Beachten Sie, dass die Methode 'copy' für das Objekt Key einen Parameter 'preserve_acl' (standardmäßig False) aufweist, der die ACL der Quelle in das Zielobjekt kopiert.

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