python - 在目标存储桶具有目录的 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
.
解决方案
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
由路径 + 文件名组成。存储桶名称必须仅包含存储桶名称本身。
推荐阅读
- haskell - 使用自动映射将 IO 异常提升到 MonadError
- amazon-ec2 - Terraform EC2 NIC private_ips 来自自定义模块输出的构建列表
- marklogic - java.lang.NoSuchFieldError: 实例 - MarkLogic
- javascript - JavaScript:基于数组中的唯一级别的多维数组的唯一 ID
- apache-spark - 如何将数据框的几列转换为元组
- c# - 整数上的Mongo C#过滤器包含
- reactjs - 使用基于配置的字段创建时,关注语义-ui-react 字段(可能带有 Ref)
- typescript - 通用条件返回类型
- android - 使用 Retrofit2 处理 Kotlin 协程错误的意外行为
- php - PHP Video Gallery 是否包含子文件夹并显示视频?