python – 使用Boto3将文件上传到带有前缀的S3存储桶

我正在尝试将文件上传到S3存储桶,但我无法访问存储桶的根级别,而是需要将其上传到某个前缀.以下代码:

import boto3
s3 = boto3.resource('s3')
open('/tmp/hello.txt', 'w+').write('Hello, world!')
s3_client.upload_file('/tmp/hello.txt', bucket_name, prefix+'hello-remote.txt')

给我一个错误:

调用PutObject操作时发生错误(AccessDenied):拒绝访问:ClientError Traceback(最近一次调用最后一次):文件“/var/task/tracker.py”,第1009行,在testHandler中s3_client.upload_file(‘/ tmp / hello .txt’,bucket_name,前缀’hello-remote.txt’)文件“/var/runtime/boto3/s3/inject.py”,第71行,在upload_file中extra_args = ExtraArgs,callback = Callback)文件“/ var / runtime /boto3/s3/transfer.py“,第641行,在upload_file self._put_object(文件名,存储桶,密钥,回调,extra_args)文件”/var/runtime/boto3/s3/transfer.py“,第651行,在_put_object中** extra_args)文件“/var/runtime/botocore/client.py”,第228行,在_api_call中返回self._make_api_call(operation_name,kwargs)文件“/var/runtime/botocore/client.py”,第492行, _make_api_call raise ClientError(parsed_response,operation_name)ClientError:调用PutObject操作时发生错误(AccessDenied):拒绝访问

bucket_name的格式为abcd,而prefix的格式为a / b / c / d /.我不确定错误是否是由于斜线错误或者是否有某种方式可以在其他地方指定前缀,或者如果我没有写入权限(尽管我应该这样做).

此代码执行时没有任何错误:

for object in output_bucket.objects.filter(Prefix=prefix):
    print(object.key)

虽然铲斗是空的,但没有输出.

解决方法:

结果我需要SSE:

transfer = S3Transfer(s3_client)
transfer.upload_file('/tmp/hello.txt', bucket_name, prefix+'hello-remote.txt', extra_args={'ServerSideEncryption': "AES256"})
上一篇:python – 使用boto3循环遍历多个aws配置文件


下一篇:python – boto3在SWF上超时60秒