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は盲点だった。。。

参考

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

本サイトはUXを悪くするevilなGoogle広告を消しました。応援してくださる方は おすすめガジェット を見ていってください!
よかったらシェアしてね!
  • URLをコピーしました!

コメント

コメントする

目次