Python+boto3でS3に画像をアップロードして公開する

背景

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:
      # 後片付け

参考

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です