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

Posted

技术标签:

【中文标题】Amazon S3 boto:如何重命名存储桶中的文件?【英文标题】:Amazon S3 boto: How do you rename a file in a bucket? 【发布时间】:2011-01-29 17:10:01 【问题描述】:

如何使用 boto 重命名存储桶中的 S3 密钥?

【问题讨论】:

投票重新开放,这是一个非常简单的问题,并不是那么模棱两可。要编辑以明确提及该文件意味着 s3 密钥。 如果有人想知道,您可以通过 AWS Web 界面执行此操作(右键单击文件 -> 重命名) 【参考方案1】:

您无法重命名 Amazon S3 中的文件。你可以用一个新名字复制它们,然后删除原来的,但是没有适当的重命名功能。

【讨论】:

请注意,复制功能看起来像是即时的(可能是符号链接)。所以这样做的速度没有问题。 在发表此评论时,它似乎不是即时的。我正在复制一个 2GB 的文件,这需要几分钟时间。 1) 谁能告诉我,将一个 3 GB 的文件复制并粘贴到同一存储桶和同一位置需要多长时间。然后删除原始文件。 2) 用户界面似乎具有重命名功能。但是用户界面在后台是否也以相同的方式工作(复制和删除)。【参考方案2】:

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

【讨论】:

【参考方案3】:

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

【讨论】:

【参考方案4】:
//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);

【讨论】:

-1:这是带有AWS SDK for .NET 的解决方案,而不是带有boto 的请求解决方案,它是一个提供Amazon Web Services 接口的Python 包

以上是关于Amazon S3 boto:如何重命名存储桶中的文件?的主要内容,如果未能解决你的问题,请参考以下文章

Amazon S3 boto - 如何创建文件夹?

从 boto3 检索 S3 存储桶中的子文件夹名称

如何在 S3 上重命名存储桶中的文件夹?

列出 Amazon S3 存储桶中所有文件的快速方法?

复制同一 Amazon S3 存储桶中的文件

如何使 Pyspark 脚本在 Amazon EMR 上运行以识别 boto3 模块?它说找不到模块