Node-RED で CSV の添付ファイル的ダウンロードを行いたいときの http response ノードの設定メモ
Node-RED で CSV の添付ファイル的ダウンロードを行いたいときの http response ノードの設定メモです。
この記事は Node-RED Advent Calendar 2025 の 1 日目の記事です。
背景

Node-RED で溜めているフロー変数やグローバル変数のデータ配列であったり、はたまた奥にある DB のデータであったりを CSV で取得したくなる時があります。
そのときに http in ノード + http response ノードで、いつも調べてしまうポイントがあるのでここでまとめておきます。
ポイントは Content-Disposition + Content-Type で返す
Content-Disposition - HTTP | MDN
通常の HTTP レスポンスにおける Content-Disposition レスポンスヘッダーは、コンテンツがブラウザーでインラインで表示されることを求められているか、つまり、ウェブページとして表示するか、ウェブページの一部として表示するか、ダウンロードしてローカルに保存する添付ファイルとするかを示します。
こちらの Content-Disposition ヘッダーを使うと CSV ファイルを名前の決まった添付ファイルとしてダウンロードできます。また Content-Type で文字コードやファイルタイプを決めることで、たとえば UFT-8 の CSV データを返すよとブラウザに知らせることができます。
実際のフロー

たとえば、どこかのボタンやリンクから Node-RED の /download/csv へつないで CSV データをダウンロードできるようになるのがこのフローです。

http in ノードは、

素直な GET リクエストで /download/csv のパスを指定しています。

真ん中の template ノードの中身も、

素直な CSV データです。

そして、HTTP レスポンスを返す http response ノードです。

このように、ヘッダに、
Content-Dispositionattachment; filename="data.csv"の文字列
Content-Typetext/csv; charset=UTF-8の文字列
を設定します。
動かしてみる

たとえば、このように Node-RED の URL にさきほどどのパスでアクセスします。

すると、このように、ファイル名が data.csv で指定されてダウンロードできます。

中を開いてみると CSV データになってます!
ファイル名がこちらで決められるので yyyy-mm-dd.csv のようなログファイルも吐き出しやすいですし、ファイルタイプも決められるので、こういった CSV ダウンロードにはうってつけです!