2010-03-20 8 views
68

Comment renommer une clé S3 dans un compartiment avec boto?Amazon S3 boto: Comment renommer un fichier dans un compartiment?

+1

Voté pour ré-ouvrir, c'est une question assez simple qui n'est pas si ambigieuse. Aller à modifier pour mentionner explicitement ce fichier signifie clé s3. – David

+0

Si quelqu'un vous demande, vous pouvez le faire via l'interface Web AWS (clic droit sur le fichier -> Renommer) –

Répondre

67

Vous ne pouvez pas renommer des fichiers dans Amazon S3. Vous pouvez les copier avec un nouveau nom, puis supprimer l'original, mais il n'y a pas de fonction de renommer appropriée.

+10

Juste une note que la fonction de copie semble instantanée (peut-être un lien symbolique). Donc pas de problème avec la vitesse. –

+17

Au moment de ce commentaire, il ne semble pas être instantané. Je copie un fichier de 2 Go et cela prend plusieurs minutes. – dtbarne

+0

1) Quelqu'un peut-il me dire combien de temps il faudrait pour copier et coller un fichier de 3 Go dans le même compartiment et au même endroit. puis supprimez le fichier d'origine. 2) Il semble que l'interface utilisateur a des fonctionnalités de renommage. Mais l'interface utilisateur fonctionne-t-elle de la même manière (copie et suppression) en arrière-plan. – shiva

-6
//Copy the object 
AmazonS3Client s3 = new AmazonS3Client("AWSAccesKey", "AWSSecretKey"); 

CopyObjectRequest copyRequest = new CopyObjectRequest() 
     .WithSourceBucket("SourceBucket") 
     .WithSourceKey("SourceKey") 
     .WithDestinationBucket("DestinationBucket") 
     .WithDestinationKey("DestinationKey") 
     .WithCannedACL(S3CannedACL.PublicRead); 
s3.CopyObject(copyRequest); 

//Delete the original 
DeleteObjectRequest deleteRequest = new DeleteObjectRequest() 
     .WithBucketName("SourceBucket") 
     .WithKey("SourceKey"); 
s3.DeleteObject(deleteRequest); 
+20

-1: il s'agit d'une solution avec [AWS SDK for .NET] (http://aws.amazon.com/sdkfornet/) plutôt que la solution demandée avec [boto] (https://github.com/boto/boto), qui est _ un package Python qui fournit des interfaces à Amazon Web Services_. –

38

Voici un exemple d'une fonction Python qui permet de copier un objet S3 en utilisant Boto 2:

import boto 

def copy_object(src_bucket_name, 
       src_key_name, 
       dst_bucket_name, 
       dst_key_name, 
       metadata=None, 
       preserve_acl=True): 
    """ 
    Copy an existing object to another location. 

    src_bucket_name Bucket containing the existing object. 
    src_key_name  Name of the existing object. 
    dst_bucket_name Bucket to which the object is being copied. 
    dst_key_name  The name of the new object. 
    metadata   A dict containing new metadata that you want 
         to associate with this object. If this is None 
         the metadata of the original object will be 
         copied to the new object. 
    preserve_acl  If True, the ACL from the original object 
         will be copied to the new object. If False 
         the new object will have the default ACL. 
    """ 
    s3 = boto.connect_s3() 
    bucket = s3.lookup(src_bucket_name) 

    # Lookup the existing object in S3 
    key = bucket.lookup(src_key_name) 

    # Copy the key back on to itself, with new metadata 
    return key.copy(dst_bucket_name, dst_key_name, 
        metadata=metadata, preserve_acl=preserve_acl) 
0

Il n'y a pas de méthode directe pour renommer le fichier en s3. qu'est-ce que vous avez à faire est de copier le fichier existant avec un nouveau nom (juste définir la clé cible) et supprimer l'ancien. Merci

Questions connexes