Python 如何将文件上载到S3并使用boto3将其公开?
我可以使用以下方式上载图像文件:Python 如何将文件上载到S3并使用boto3将其公开?,python,amazon-s3,boto,boto3,Python,Amazon S3,Boto,Boto3,我可以使用以下方式上载图像文件: s3 = session.resource('s3') bucket = s3.Bucket(S3_BUCKET) bucket.upload_file(file, key) 但是,我也想公开该文件。我试图查找一些函数来设置文件的ACL,但似乎boto3已经更改了它们的API并删除了一些函数。在boto3的最新版本中有没有办法做到这一点?我可以使用objectAcl API做到这一点: s3 = boto3.resource('s3') object_acl
s3 = session.resource('s3')
bucket = s3.Bucket(S3_BUCKET)
bucket.upload_file(file, key)
但是,我也想公开该文件。我试图查找一些函数来设置文件的ACL,但似乎boto3已经更改了它们的API并删除了一些函数。在boto3的最新版本中有没有办法做到这一点?我可以使用objectAcl API做到这一点:
s3 = boto3.resource('s3')
object_acl = s3.ObjectAcl('bucket_name','object_key')
response = object_acl.put(ACL='public-read')
有关详细信息:有效。但是,如果您像我一样,可能会遇到访问被拒绝的问题。这通常是由于用户的权限被破坏造成的。
我通过将以下内容添加到Action
数组中修复了它:
"s3:GetObjectAcl",
"s3:PutObjectAcl"
要在一个步骤中上载并将权限设置为公开可读,您可以使用:
bucket.upload_文件(文件、密钥、外部参数={'ACL':'public-read'})
如果只更新一个对象,请参见一行程序
boto3.resource('s3').ObjectAcl('bucket\u name','object\u key').put(ACL='public-read')
这与ACL='public-read'
:grantrade='uri='http://acs.amazonaws.com/groups/global/AllUsers“
对于将来阅读此文章的任何人,显然,公开阅读是目前的默认设置。请参阅中的巨型警告,无论如何,它不适用于boto3:botocore.exceptions.ParamValidationError:参数验证失败:输入中的未知参数:“ExtraArgs”,必须是以下参数之一:ACL、正文、Bucket、CacheControl、ContentDisposition、ContentEncoding、ContentLanguage、ContentLength、ContentMD5、ContentType、Expires、GrantFullControl、,Grantrade、GrantradeACP、GrantWriteACP、密钥、元数据、ServerSideEncryption、StorageClass、WebsiteRedirectLocation、SSeCustomerGorithm、SSECustomerKey、SSECustomerKeyMD5、SSEKMSKeyId、RequestPayer、Tagging、ObjectLockMode、ObjectLockRetainUntilDate、ObjectLockLegalHoldStatus
在这两个方面对我都起了作用。您在哪里声明操作数组?