首页 > 解决方案 > 在目标存储桶具有目录的 s3 存储桶之间复制文件

问题描述

我有两个 s3 存储桶。我想将文件从 Bucket 复制from到 Bucket to。在 Bucketto中,我有一个文件夹/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.

标签: pythonamazon-web-servicesamazon-s3aws-sdk

解决方案


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由路径 + 文件名组成。存储桶名称必须仅包含存储桶名称本身。


推荐阅读