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

时间:2019-06-25 17:31:10

标签: python amazon-web-services amazon-s3 aws-sdk

我有两个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

1 个答案:

答案 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由路径+文件名组成。存储桶名称只能由存储桶名称本身组成。