2009-09-23 5 views

Répondre

2

S3 permet la copie d'un objet à l'autre. L'opération CopyObject crée une copie d'un objet lorsque vous spécifiez la clé et le compartiment d'un objet source ainsi que la clé et le compartiment d'une destination cible. Vous ne savez pas si boto a une implémentation compacte.

4

En parcourant le code source de boto, j'ai trouvé que l'objet Clé avait une méthode de "copie". Merci pour votre suggestion sur l'opération CopyObject.

+0

Aide à la copie de la méthode dans le module boto.s3.key: 'copie (self, dst_bucket, dst_key, les métadonnées = None, reduced_redundancy = False, preserve_acl = False, encrypt_key = Faux)' de boto. s3.key.Key instance Copiez cette clé dans un autre compartiment. –

14

Où seau est le seau de destination:

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

Cela lit réellement la clé et la place dans le nouveau seau - ce qui n'est pas ce que vous voulez. Pardon. –

+0

Je ne crois pas que ce soit exact. C'est la meilleure réponse IMO. La méthode 'copy_key' transmet l'en-tête' x-amz-copy-source' dans une requête PUT, qui demande à S3 de copier directement d'une région à l'autre, sans le télécharger sur votre machine. – sergiopereira

+0

Voici les docs: http://boto.cloudhackers.com/en/latest/ref/s3.html#boto.s3.bucket.Bucket.copy_key – creimers

2

Bien que personne n'a demandé, je pensais que ce serait peut-être utile pour montrer comment faire avec simples3:

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

Je ne suis pas sûr de ce que Boto fait ici, mais il est à noter que les permissions (ACL) pas seront copiées par S3, elles seront réinitialisées à "private" si rien d'autre n'est spécifié. Pour copier l'ACL, vous devez d'abord le demander.

+0

Je seconde ce commentaire concernant les permissions (après avoir rencontré un bug) 'dest_bucket .copy_key (key.name, src_bucket_name, key.name, preserve_acl = True) ' – nsof

0

Notez que la méthode 'copy' de l'objet Key a un paramètre "preserve_acl" (False par défaut) qui va copier la liste de contrôle d'accès de la source vers l'objet de destination.

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 
Questions connexes