boto3でS3にアップロードした画像が、ブラウザで表示するとダウンロードされてしまう時

公開用のS3のバケットにアップロードした画像を、URL直打ちで閲覧すると、いつもならブラウザに表示されるのだが、ダウンロードされてしまうケースがある。

content-typeでイメージのmimeタイプが指定されていないため。対応のメモ。

現象

Lambda関数(python3)で画像を生成し、S3の公開用バケットにアップロードした。アップロード先のURLを直打ちでアクセスすると、ブラウザ内に表示されるのではなくて、ダウンロードされてしまった。

ブラウザ内で表示されるようにしたい。

原因

content-typeがイメージのmimeタイプで設定されていないため。

対応

uploadの時に、content-typeを指定する。upload_fileにおいては、ExtraArgsにjsonで指定する。たとえばimage/jpegを指定する時は以下。

client.upload_file(Filename=fname, Bucket=bucket_name, Key=dest_key, ExtraArgs={"ContentType": "image/jpeg"})

upload_fileではなくput_objectの時は、普通にContentTypeが使える。

client.put_object(Bucket=bucket_name, Key=dest_key, ContentType="image/jpeg")

content-typeは盲点だった。。。

参考

ありがとうございました。

関連記事

aws の記事

Python の記事

スポンサーリンク

コメントを残す

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