12
8

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

S3へのアップロードでsvgファイルのContent-typeが変わってしまう原因と対策

Last updated at Posted at 2018-03-05

事象

aws s3 cliコマンドでSVGファイルをアップロードすると、content-typeがbinary/octet-streamになってしまう。

原因

完全に把握できたわけではないですが、
このRequest HeaderのContent-typeのあたりを読むと、defaultとなりうる値が binary/octet-stream となっている。

jpgなどの他のバイナリファイルはそのままimage/jpgなどのままアップロードしてくれるものの、svgはPUT時に自動で拡張子から読み取ってヘッダ付与しない仕様なのか、default値が取られていると推定されます。

対処

特定のファイルのcontent-typeを書き換える方法はググれば出てきますが、多くのケースでは、一括で静的ファイルをアップロードしてその中のsvgファイルのみ書き換えたいかと思います。

よって、他の拡張子のファイルはいったん除外し、svgのみを指定する方法をとり、汎用コマンドとしました。

$ aws s3 cp --recursive s3://${S3_BUCKET}/images s3://${S3_BUCKET}/images --exclude '*' --include '*.svg' --metadata-directive "REPLACE" --content-type "image/svg+xml"
  • --excludeで全ファイルを対象外とし
  • --includeでsvgファイルのみを含める
  • --metadata-directive "REPLACE" --content-typeでContent-typeを置き換える

これでバケットのimagesディレクトリ内のすべてのsvgファイルを再帰的に変更します。

一括アップロード後にこちらのコマンドを叩くよう各種デプロイツールに組み込むとよい。

余談

再現させていませんが、pdfファイルも同様の現象が発生するらしい。

12
8
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
12
8

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?