Wie benennt man einen S3-Schlüssel in einem Bucket mit boto um?
Wie benennt man einen S3-Schlüssel in einem Bucket mit boto um?
Antworten:
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.
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)
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
//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);