在目标存储桶具有目录的 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
。
Amazon 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
由路径 + 文件名组成。存储桶名称必须仅包含存储桶名称本身。
我有两个 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
。
Amazon 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
由路径 + 文件名组成。存储桶名称必须仅包含存储桶名称本身。