如何使用boto3将文件上传到S3并公开?

时间:2017-01-27 23:45:10

标签: python amazon-s3 boto boto3

我可以使用以下方式上传图片文件:

s3 = session.resource('s3')
bucket = s3.Bucket(S3_BUCKET)
bucket.upload_file(file, key)

但是,我也希望公开这个文件。我尝试查找一些函数来为文件设置ACL,但似乎boto3已更改其API并删除了一些函数。有没有办法在最新版本的boto3中做到这一点?

3 个答案:

答案 0 :(得分:48)

要一步上传并设置公开阅读权限,您可以使用:

bucket.upload_file(file, key, ExtraArgs={'ACL':'public-read'})

答案 1 :(得分:26)

我能够使用objectAcl API:

s3 = boto3.resource('s3')
object_acl = s3.ObjectAcl('bucket_name','object_key')
response = object_acl.put(ACL='public-read')

详细信息:http://boto3.readthedocs.io/en/latest/reference/services/s3.html#objectacl

答案 2 :(得分:3)

Adi's way有效。但是,如果您像我一样,您可能会遇到访问被拒绝的问题。这通常是由用户的权限中断引起的。 我通过在Action数组中添加以下内容来修复它:

"s3:GetObjectAcl",
"s3:PutObjectAcl"