Amazon S3 boto: Wie benennt man eine Datei in einem Bucket um?

72

Wie benennt man einen S3-Schlüssel in einem Bucket mit boto um?

felix
quelle
1
Bei der Wiedereröffnung gewählt, ist dies eine ziemlich einfache Frage, die nicht so vieldeutig ist. Wenn Sie zur Bearbeitung gehen, um diese Datei explizit zu erwähnen, bedeutet dies s3 key.
David
1
Falls sich jemand wundert, können Sie dies über die AWS-Weboberfläche tun (Rechtsklick auf Datei -> Umbenennen)
Robbie Averill

Antworten:

69

Sie können Dateien in Amazon S3 nicht umbenennen. Sie können sie mit einem neuen Namen kopieren und dann das Original löschen, es gibt jedoch keine ordnungsgemäße Umbenennungsfunktion.

ceejayoz
quelle
10
Nur ein Hinweis, dass die Kopierfunktion sofort angezeigt wird (möglicherweise ein Sym-Link). Also kein Problem mit der Geschwindigkeit dabei.
Mauvis Ledford
17
Zum Zeitpunkt dieses Kommentars scheint es NICHT augenblicklich zu sein. Ich kopiere eine 2-GB-Datei und es dauert einige Minuten.
dtbarne
1) Kann mir jemand sagen, wie viel Zeit es dauern würde, eine 3-GB-Datei im selben Bucket und am selben Speicherort zu kopieren und einzufügen. und löschen Sie dann die Originaldatei. 2) Es scheint, dass die Benutzeroberfläche Umbenennungsfunktionen hat. Aber funktioniert die Benutzeroberfläche auch im Hintergrund auf die gleiche Weise (Kopieren und Löschen).
Yogesh Yadav
39

Hier ist ein Beispiel für eine Python-Funktion, die ein S3-Objekt mit Boto 2 kopiert:

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)
garnaat
quelle
0

Es gibt keine direkte Methode, um die Datei in s3 umzubenennen. Sie müssen lediglich die vorhandene Datei mit dem neuen Namen kopieren (einfach den Zielschlüssel festlegen) und den alten löschen. Vielen Dank

Prasad Shigwan
quelle
-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);
prasadNVM
quelle
21
-1: Dies ist eine Lösung mit dem AWS SDK für .NET und nicht die angeforderte Lösung mit boto , einem Python-Paket, das Schnittstellen zu Amazon Web Services bereitstellt .
Steffen Opel