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


72

如何使用Boto在存储桶中重命名S3密钥?


1
投票决定重新开放,这是一个非常简单的问题,没有那么模棱两可。编辑以明确提及该文件意味着s3键。
大卫,

1
如果有人想知道,您可以通过AWS Web界面执行此操作(右键单击文件->重命名)
Robbie Averill

Answers:


69

您无法在Amazon S3中重命名文件。您可以使用新名称复制它们,然后删除原始名称,但是没有适当的重命名功能。


10
请注意,复制功能看起来像是即时的(也许是符号链接)。因此,这样做速度没有问题。
莫维斯·莱德福德

17
在发表此评论时,它似乎不是即时的。我正在复制2GB的文件,这需要几分钟。
dtbarne 2013年

1)有人可以告诉我,将3 GB文件复制并粘贴到同一存储桶中和同一位置需要多少时间。然后删除原始文件。2)似乎用户界面具有重命名功能。但是用户界面在后台也以相同的方式工作(复制和删除)。
Yogesh Yadav

39

这是一个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)

0

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


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

21
-1:这是与解决方案AWS SDK用于.NET,而不是与请求的解决方案博托,这是一个Python包,提供接口,亚马逊网络服务
Steffen Opel 2012年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.