Amazon S3 boto: 如何重命名桶中的文件?

如何用 boto 重命名桶中的 S3键?

41014 次浏览

在 Amazon S3中不能重命名文件。您可以用一个新名称复制它们,然后删除原始的,但是没有正确的重命名函数。

//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);

下面是一个 Python 函数的示例,它将使用 Boto 2复制 S3对象:

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)

在 s3中没有重命名文件的直接方法。你需要做的就是用新的名字复制现有的文件(只需要设置目标键)并删除旧的。谢谢你