公開用の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_SDKでS3にアップした画像を開くとブラウザに表示されないあなたへ
- python – AWS Content Type Settings in S3 Using Boto3 – Stack Overflow
- S3 — Boto 3 Docs 1.7.81 documentation
関連記事
aws の記事
- [2019年1月22日] AWSのAPI Gateway + LambdaによるWeb APIでクエリ文字列を用いるcloudformation用テンプレートファイルの記述(swagger形式)
- [2019年1月14日] AWS SQSについて学ぶ
- [2019年1月12日] AWS CLIでよく使っているコマンド
- [2018年11月17日] S3に有効期限のあるURLを作って画像ファイルをPUTする
- [2018年8月22日] クラウドの利用について思う
- ---本記事---
- [2018年8月10日] DynamoDBを使い始めて気をつけていること。DynamoDBをLambdaで使いたい
- [2018年8月8日] S3にGETやらPUTやらしたい時の設定
- [2018年8月3日] AWSのLambdaでcronみたいな感じで定期実行する
- [2018年7月31日] LambdaでS3をトリガーにした時にConfigurations overlap. Configurations on the same bucket cannot share a common event type.と怒られる
- [2018年7月31日] Lambdaで、S3に画像がアップロードされたら、別のバケットにコピーする(python3)
Python の記事
- [2023年3月21日] motoでDynamoDBのMockを作成する
- [2021年11月18日] GKE + Flask で REST API
- [2019年5月23日] SendGridのAPIでPythonライブラリ(6.0.5)を使って添付ファイルを送信する
- [2019年4月4日] C1801: Do not use len(SEQUENCE) to determine if a sequence is empty (len-as-condition)と怒られた時
- [2019年4月3日] Python + SendGrid API でメールを送信する
- ---本記事---
- [2018年7月27日] Pandasで2列を比較してTrue/Falseの新たな列を作る。さらに1/0へのマッピング
- [2018年7月20日] pythonのpipで入れているもの
- [2018年6月25日] cronのpythonスクリプト内にあるjson.dump()でensure_ascii=Falseにして日本語出力しようとしてハマった
- [2018年6月22日] pythonでRSSフィードを取得し、画像がない場合、リンク先の記事から拾う
- [2018年5月21日] pythonのmysqlclientでSSH越しにAWSのRDSにアクセス
スポンサーリンク