公開用の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は盲点だった。。。
参考
ありがとうございました。
コメント