2009-09-23 23 views

Respuesta

2

S3 permite la copia objeto por objeto. La operación de CopyObject crea una copia de un objeto cuando se especifica la clave y el cubo de un objeto de origen y la clave y el cubo de un destino de destino. No estoy seguro si boto tiene una implementación compacta.

4

Al navegar por el código fuente de Boto encontré que el objeto Key tiene un método de "copia". Gracias por su sugerencia acerca de la operación de CopyObject.

+0

Ayuda en el ejemplar método en el boto.s3.key módulo: 'copia (auto, dst_bucket, dst_key, metadatos = Ninguno, reduced_redundancy = False, preserve_acl = False, ENCRYPT_KEY = False)' método de boto. s3.key.Key instance Copie esta clave en otro depósito. –

14

Dónde cubo es el cubo de destino:

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

Esto realmente lee la clave y la coloca en el nuevo depósito, que no es lo que desea. Lo siento. –

+0

No creo que esto sea exacto. Esta es la mejor respuesta IMO. El método 'copy_key' pasa el encabezado' x-amz-copy-source' en una solicitud PUT, que le dice a S3 que copie directamente de región a región, sin descargar a su máquina. – sergiopereira

+0

Aquí están los documentos: http://boto.cloudhackers.com/en/latest/ref/s3.html#boto.s3.bucket.Bucket.copy_key – creimers

2

Aunque nadie preguntó, pensé que podría ser relevante para mostrar cómo hacer esto con simples3:

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

No estoy seguro de lo Boto lo hace aquí, pero vale la pena señalar que los permisos (ACL) serán no copiados por S3, se restablecerán a "privado" si no se especifica nada más. Para copiar la ACL, primero debe solicitarla.

+0

En segundo lugar este comentario con respecto a los permisos (después de encontrar un error) 'dest_bucket .copy_key (key.name, src_bucket_name, key.name, preserve_acl = True) ' – nsof

0

Tenga en cuenta que el método 'copiar' en el objeto clave tiene un parámetro "preserve_acl" (falso de forma predeterminada) que copiará la ACL de la fuente al objeto de destino.

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 
Cuestiones relacionadas