Node-RED で CSV の添付ファイル的ダウンロードを行いたいときの http response ノードの設定メモ

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-Disposition
    • attachment; filename="data.csv" の文字列
  • Content-Type
    • text/csv; charset=UTF-8 の文字列

を設定します。

動かしてみる

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

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

中を開いてみると CSV データになってます!

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