简体   繁体   中英

Boto3: copy objects within bucket

Is it possible to copy/duplicate objects within one prefix to another prefix in the same s3 bucket?

You can use copy_object() to copy an object in Amazon S3 to another prefix, another bucket and even another Region. The copying takes place entirely within S3, without needing to download/upload the object.

For example, to copy an object in mybucket from folder1/foo.txt to folder2/foo.txt , you could use:

import boto3

s3_client = boto3.client('s3')

response = s3_client.copy_object(
    CopySource='/mybucket/folder1/foo.txt',  # /Bucket-name/path/filename
    Bucket='mybucket',                       # Destination bucket
    Key='folder2/foo.txt'                    # Destination path/filename
)

An alternative using boto3 resource instead of client :

bucket = boto3.resource("s3").Bucket(my_bucket_name)
copy_source = {"Bucket": my_bucket_name, "Key": my_old_key}
bucket.copy(copy_source, my_new_key)

Where my_bucket_name , my_old_key and my_new_key are user defined variables.

Depending on the setup, additional arguments might be needed to instantiate a boto3 resource . A more complete instantiation call would be:

boto3.resource(
        "s3",
        endpoint_url=my_endpoint_url,
        aws_access_key_id=my_aws_access_key_id,          # Do not expose me in source code!
        aws_secret_access_key=my_aws_secret_access_key,  # Do not expose me in source code!
    )

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM