我正试图在Python3中使用boto3将文件从一个S3存储桶复制到另一个存储桶。我看到了以下内容,
- 使用boto3在两个AWS S3存储桶之间移动文件
- boto3文档
- aws s3 boto3复制((
- 如何使用boto3将文件或数据写入S3对象
我的代码如下。
import boto3
bucket_old = "bold" # old bucket name
key_old = "/k/old" # old file key
bucket_new = "bnew" # new bucket name
key_new = "/k/new" # new file key
s3 = boto3.resource('s3')
copy_source = {
'Bucket': bucket_old,
'Key': key_old
}
copy_source = {
'Bucket': bucket_old,
'Key': key_old
}
print(copy_source)
print(bucket_new+key_new)
response = s3.meta.client.copy(CopySource=copy_source, Bucket=bucket_new, Key=key_new)
print(response)
print("done")
据我所知,这正是医生的建议。我在copy
命令中尝试过使用和不使用arg名称。
print(bucket_new+key_new)
和print("done")
行都按预期执行,程序成功完成。但是,遗憾的是,该文件没有出现在新位置。看起来copy
本身正在无声地失败。另外,response
返回None
。是什么导致了这些?
我可以使用成功列出所有存储桶
for bucket in s3.buckets.all():
print(bucket.name)
这表明我已经成功地通过了AWS帐户的身份验证。
我在这里错过了什么?s3.meta.client.copy
是正确的方法吗?还是应该使用copy_object
?这些之间有什么区别?
谢谢!
在这种情况下,使用前导/
设置密钥会导致boto3静默失败。卸下前导/
。