Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/362.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何将文件上载到S3并使用boto3将其公开?_Python_Amazon S3_Boto_Boto3 - Fatal编程技术网

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
在这两个方面对我都起了作用。您在哪里声明操作数组?