我有两个s3存储桶。我想将文件从存储桶from
复制到存储桶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
。
答案 0 :(得分:1)
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
由路径+文件名组成。存储桶名称只能由存储桶名称本身组成。