Как загрузить файл на S3 и сделать его общедоступным с помощью boto3?
Я могу загрузить файл изображения, используя:
s3 = session.resource('s3')
bucket = s3.Bucket(S3_BUCKET)
bucket.upload_file(file, key)
Однако я хочу сделать файл общедоступным. Я попытался найти некоторые функции для установки ACL для файла, но похоже, что boto3 изменил свой API и удалил некоторые функции. Есть ли способ сделать это в последней версии boto3?
Ответы
Ответ 1
Я смог сделать это с помощью API-интерфейса objectAcl:
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
Чтобы загрузить и установить разрешение на общедоступное чтение за один шаг, вы можете использовать:
bucket.upload_file(file, key, ExtraArgs={'ACL':'public-read'})
Видеть https://boto3.amazonaws.com/v1/documentation/api/latest/guide/s3-uploading-files.html#the-extraargs-parameter
Ответ 3
Ади путь. Однако, если бы вы были похожи на меня, возможно, вы столкнулись с проблемой отказа в доступе. Обычно это вызвано нарушениями прав пользователя.
Я исправил его, добавив следующее в массив Action
:
"s3:GetObjectAcl",
"s3:PutObjectAcl"