開発覚書はてな版

個人的な開発関連の備忘録

【JavaScript】textareaで入力した文字列をファイルで保存する

概要

textareaで入力した文字列をファイルで保存するための最低限のサンプルを実装する。

実装方針

  • 外部ライブラリを使用せず最低限の実装にする。
  • String を Blob 化する。
  • Blob を URL.createObjectURL を使用してオブジェクトのURLを作成する。
  • ダウンロード用のaタグを生成して、上記で作成したURLをJavaScript上でクリックするようにする。

サンプルコード

<!DOCTYPE html>
<html lang="ja">
<head>
  <meta charset="utf-8">
  <title>Blob Sample</title>
  <script>
    function save() {
      // テキストエリアより文字列を取得
      const txt = document.getElementById('txt').value;
      if (!txt) { return; }

      // 文字列をBlob化
      const blob = new Blob([txt], { type: 'text/plain' });

      // ダウンロード用のaタグ生成
      const a = document.createElement('a');
      a.href =  URL.createObjectURL(blob);
      a.download = 'sample.txt';
      a.click();
    };
  </script>
</head>
<body>
  <button onclick="save();">Save Text</button>
  <br />
  <textarea id="txt" cols="50" rows="5"></textarea>
</body>
</html>

実行結果

f:id:kakkoya:20190814173149g:plain

サンプルコード一式

github.com

利用できるシーン

  • SPA(シングルページアプリケーション)などでCSVをブラウザ上で加工して出力する
  • Ajaxでファイルをバイナリで取得して、そのデータを保存したい場合