0
0

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 1 year has passed since last update.

【覚書き】ブラウザでファイルダウンロードさせるためのAPIレスポンスの設定

Last updated at Posted at 2023-12-23

初めに

あるファイルをAPIレスポンスとして返す際、そのファイルをダウンロードしたい時があると思います。今回はその際に必要なAPIレスポンスの設定を調べたので、備忘を兼ねてアウトプットします。

※使用したブラウザはGoogle Chromeです。

結論

レスポンスヘッダに以下のヘッダーをつければOKです。
ダウンロードするファイルはContentに設定してください。

ヘッダー項目 設定値 備考
Content-Disposition attachment; filename=[ダウンロードするファイル名]
Content-Type ファイルの形式に合わせて設定
例)application/octet-streamなど
※1
Access-Control-Allow-Origin ダウンロード先サーバのオリジン ※2

※1:なくても一応ダウンロード可能。
※2:APIとダウンロード先のサーバが違う場合は必須。同じ場合は不要。

必要な設定について

それぞれの設定について解説します。

Content-Disposition

ファイルをWebページとして表示させるか、ダウンロードするかどうかを設定する項目です。
今回はattachment; filename=[ファイル名]を指定してダウンロードします。

詳細
inline Webページとして表示する
attachment ダウンロードする
attachment; filename=[ファイル名] ファイル名を指定してダウンロードする

Content-Type

返したいファイルの形式を指定します。
一般的なものは以下です。
※指定しなくてもなくても一応ダウンロードはできるようです。

Content-Type 説明
text/plain プレーンテキスト
text/html HTMLドキュメント
application/json JSON形式のデータ
application/xml XML形式のデータ
application/x-www-form-urlencoded HTMLフォームで使用される標準のエンコード形式
multipart/form-data フォームデータのマルチパートエンコード
application/octet-stream バイナリデータ
image/jpeg JPEG画像
image/png PNG画像
application/pdf PDFドキュメント
application/zip ZIPアーカイブ
application/vnd.ms-excel Microsoft Excelスプレッドシート
application/vnd.ms-word Microsoft Wordドキュメント
audio/mpeg MPEGオーディオ
video/mp4 MP4ビデオ

Access-Control-Allow-Origin

APIとダウンロード先のサーバが異なる場合、ブラウザによってはCORSで処理がうまくいかない場合があります。
その場合、ヘッダーの値でダウンロードファイルが存在するサーバのOriginを指定する必要があるようです。
※自分の場合は同じサーバ内だったため指定は不要でした。

CORSについては以下参照

終わりに

普段フレームワークを使ってるとそんなに意識せずに実装できてましたが、改めて調べてみるとこんな仕組みになっているんだと知ることができて面白かったです。
今回した実装も今度書く予定です(多分)。

ご覧いただきありがとうございました!

参考

https://qiita.com/yutoo89/items/c59a6a920b1bd6a72d59
https://qiita.com/att55/items/2154a8aad8bf1409db2b

0
0
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
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?