在目标存储桶具有目录的 s3 存储桶之间复制文件

Copy files between s3 Buckets with destination bucket having a directory

我有两个 s3 存储桶。我想将文件从 Bucket from 复制到 Bucket to。在存储桶 to 中,我有一个文件夹 /copy_here。当我尝试使用 Boto 直接复制存储桶之间的内容时,它起作用了。但是当我想将其复制到目标中的目录时,我得到 ParameterValidationError。这是我尝试执行的代码:

def copyToBucket(fromBucket, toBucket, fileName):
    copySource = {
        'Bucket': readBucketName,
        'Key': fileName
    }
    uploadBucket = s3.Bucket(uploadBucketName)
    uploadBucket.copy(copySource, fileName) 

我查看了 s3 元客户端,它也提供了相同的功能。我不确定这个操作是否可以一步完成。如果有的话,那就太好了。如果不是,我是否应该首先复制到目标存储桶并将我的文件移动到 copy_here 文件夹?目前,我的uploadBucketName已经设置为to/copy_here

A​​mazon S3 中不存在文件夹和目录。相反,对象的文件名 (Key) 由 完整路径加上文件名 组成。 (好吧,S3 管理控制台使它看起来 有文件夹,但实际上它们并不存在。)

因此,这将根据您的需要复制文件:

import boto3

copySource = {
    'Bucket': 'source-bucket-name',
    'Key': 'foo.txt'
}
uploadBucket = s3.Bucket('destination-bucket-name')
uploadBucket.copy(copySource, 'copy_here/foo.txt') 

请注意,目标 Key 由路径 + 文件名组成。存储桶名称必须仅包含存储桶名称本身。