背景
Pythonでboto3ライブラリを使ってAWSのS3に画像をアップロードする際に、セキュリティの設定でデフォルトは読み書き不可にしている場合に、アップロードしたファイルだけ公開したい場合があります。
対応
upload_fileの引数にExtraArgs
でjson形式でACLを指定して、公開状態にします。
import os
import boto3
class MyAws():
def upload_s3(self, original_file_path, upload_folder, upload_filename):
self.s3 = boto3.client('s3',
aws_access_key_id=os.getenv('S3_ACCESS_KEY'),
aws_secret_access_key=os.getenv('S3_SECRET_KEY'),
region_name=os.getenv('S3_REGION_NAME'))
upload_filename = os.path.join(folder_name, upload_filename)
try:
result = self.s3.upload_file(original_file_path, os.environ["S3_BUCKET_NAME"], upload_filename, ExtraArgs={"ContentType": "image/jpeg", 'ACL':'public-read'})
except boto3.exceptions.S3UploadFailedError:
print("S3へのアップロードでエラーが発生しました")
raise boto3.exceptions.S3UploadFailedError
finally:
# 後片付け