web-dev-qa-db-ja.com

Amazon S3 boto:バケット内のファイルの名前を変更するにはどうすればよいですか?

Botoを使用してバケット内のS3キーの名前を変更するにはどうすればよいですか?

71
felix

Amazon S3でファイルの名前を変更することはできません。新しい名前でコピーしてから元の名前を削除できますが、適切な名前変更機能はありません。

68
ceejayoz

以下に、Boto 2を使用してS3オブジェクトをコピーするPython関数の例を示します。

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)
39
garnaat

S3でファイルの名前を変更する直接的な方法はありません。必要なことは、既存のファイルを新しい名前でコピーし(ターゲットキーを設定するだけ)、古いファイルを削除することです。ありがとうございました

0
Prasad Shigwan