python - 尽管响应成功,但无法将 s3 文件上传到另一个区域(客户端存储桶)
问题描述
这是我的代码。我正在尝试将目录从一个存储桶复制到另一个存储桶。我看到一切都是积极的,但文件没有出现在客户端存储桶中。
import boto3
ACCESS_KEY = 'access_key'
SECRET_KEY = 'secret_key'
REGION_NAME = 'US_EAST_1'
source_bucket = 'source_bucket'
#Make sure you provide / in the end
source_prefix = 'source_prefix'
target_bucket = 'target-bucket'
target_prefix = 'target-prefix'
client = boto3.client('s3')
session_src = boto3.session.Session()
source_s3_r = session_src.resource('s3')
def get_s3_keys(bucket, prefix):
keys = []
response = client.list_objects_v2(Bucket=bucket,Prefix=prefix,MaxKeys=100)
for obj in response['Contents']:
keys.append(obj['Key'])
return keys
session_dest = boto3.session.Session(aws_access_key_id=ACCESS_KEY,
aws_secret_access_key=SECRET_KEY)
dest_s3_r = session_dest.resource('s3')
# create a reference to source image
old_obj = source_s3_r.Object(source_bucket, source_prefix)
# create a reference for destination image
new_obj = dest_s3_r.Object(target_bucket, target_prefix)
keys = get_s3_keys(source_bucket, source_prefix)
responses = []
# upload the image to destination S3 object
for filename in keys:
print("Transferring file {}, {}".format(source_bucket,filename))
old_obj = source_s3_r.Object(source_bucket, filename)
response = new_obj.put(Body=old_obj.get()['Body'].read())
response_code = response['ResponseMetadata']['HTTPStatusCode']
responses.append(response_code)
print("File transfer response {}".format(response_code))
distinct_response = list(set(responses))
if len(distinct_response) > 1 or distinct_response[0] != 200:
print("File could not be transfered to krux bucket. Exiting now")
exit(1)
else:
print("File transfer to krux bucket successful")
我收到 200 的成功响应代码,但文件未传输。
解决方案
Srinivas,试试这个我使用了 S3 资源对象,如果你想试试等效的 S3 客户端......
bucket= s3.Bucket(bucket_name) #from_bucket
for osi in bucket.objects.all():
print(osi)
copy_source={
'Bucket': bucket.name,
'Key': osi.key
}
s3.Bucket('to_bucket').copy(copy_source, osi.key)
希望它有帮助.. r0ck
推荐阅读
- r - 如何将等高线添加到平铺图
- c# - 需要从视图数据中选择最后一个 ID
- c# - 解析值时遇到意外字符:T. Path '', line 0, position 0. 不更新数据库中的实体
- mysql - 如何根据其他两列的不同组合检查第三列中的匹配值?
- java - Java泛型在类字段和序列化上的变化
- java - Selenium with java - 需要点击一个按钮
- ?
- excel-formula - 需要 2 列的公式 (B & F) 整列需要公式
- mysql - Mysql 应用程序日志记录。通过删除旧日志来限制记录的行数
- android - “ANativeWindow_fromSurface”的对面
- sql - 仅从几乎相似的行中选择(显示)不同的列