web-dev-qa-db-ja.com

boto3を使用してファイルをS3にアップロードして公開する方法は?

以下を使用して画像ファイルをアップロードできます。

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

ただし、ファイルも公開したいです。ファイルのACLを設定するいくつかの関数を探してみましたが、boto3のAPIが変更され、いくつかの関数が削除されたようです。 boto3の最新リリースでそれを行う方法はありますか?

36
Adi

私は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

30
Adi

アップロードして1つのステップで一般に読み取り可能なアクセス許可を設定するには、次を使用できます。

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

54
Bill Baker

アディの方法 は機能します。ただし、あなたが私のような人であれば、アクセス拒否の問題に遭遇した可能性があります。これは通常、ユーザーの権限が壊れていることが原因です。 Action配列に次を追加して修正しました。

"s3:GetObjectAcl",
"s3:PutObjectAcl"
4
Rohan Bagchi