JavaScript 逆引き集 | FileReader でローカルファイル読み込み

JavaScript JavaScript
スポンサーリンク

FileReader でローカルファイル読み込み — const fr = new FileReader(); fr.onload = e => console.log(e.target.result)

FileReader はブラウザで「ユーザーが選んだローカルファイル」を読み込むためのAPIです。テキストや画像などを JavaScript で扱えるようになります。初心者がまず触れるのは「テキストファイルを読み込んで表示する」ケースです。


基本の流れ

  1. <input type="file"> でユーザーにファイルを選んでもらう。
  2. 選ばれたファイルを FileReader に渡す。
  3. 読み込み完了イベント (onload) で結果を受け取る。
  4. result に読み込んだ内容が入る。

基本コード例(テキストファイルを読み込む)

<input type="file" id="fileInput">
<pre id="output"></pre>

<script>
  const input = document.getElementById("fileInput");
  const output = document.getElementById("output");

  input.addEventListener("change", () => {
    const file = input.files[0]; // 選択された最初のファイル
    if (!file) return;

    const fr = new FileReader();

    // 読み込み完了時の処理
    fr.onload = (e) => {
      output.textContent = e.target.result; // ファイル内容を表示
    };

    // テキストとして読み込む
    fr.readAsText(file);
  });
</script>
HTML
  • ポイント: readAsText(file) でテキストとして読み込む。
  • 結果: e.target.result に文字列が入る。

よく使うテンプレート集

画像ファイルを読み込んで表示

<input type="file" id="imgInput">
<img id="preview" style="max-width:200px">

<script>
  const input = document.getElementById("imgInput");
  const preview = document.getElementById("preview");

  input.addEventListener("change", () => {
    const file = input.files[0];
    if (!file) return;

    const fr = new FileReader();
    fr.onload = (e) => {
      preview.src = e.target.result; // DataURLをimgに設定
    };
    fr.readAsDataURL(file); // Base64形式で読み込む
  });
</script>
HTML
  • ラベル: readAsDataURL(file) を使うと画像を直接 <img> に表示できる。

バイナリデータを読み込む

const fr = new FileReader();
fr.onload = (e) => {
  const arrayBuffer = e.target.result; // ArrayBuffer
  const bytes = new Uint8Array(arrayBuffer);
  console.log("バイト数:", bytes.length);
};
fr.readAsArrayBuffer(file);
JavaScript
  • ラベル: readAsArrayBuffer(file) でバイナリを扱える。音声やPDF解析などに使う。

実務でのコツ

  • ユーザー操作必須: セキュリティ上、ユーザーが <input type="file"> で選んだファイルしか読めない。勝手にPC内のファイルを読むことはできない。
  • 読み込み方法を選ぶ:
    • テキスト → readAsText
    • 画像表示 → readAsDataURL
    • バイナリ処理 → readAsArrayBuffer
  • エラー処理: fr.onerror で読み込み失敗を検知できる。
  • 大きなファイル: 数MB〜数百MBでも扱えるが、処理が重くなるので注意。

ありがちなハマりポイントと対策

  • ファイルが選ばれていない:
    • 対策: if (!file) return; でチェック。
  • 文字化け:
    • 対策: readAsText(file, "utf-8") のようにエンコーディングを指定できる。
  • 画像を表示できない:
    • 対策: readAsDataURL を使う。テキスト読み込みでは <img> に表示できない。

練習問題(CSVファイルを読み込んで表示)

<input type="file" id="csvInput">
<table id="table" border="1"></table>

<script>
  const input = document.getElementById("csvInput");
  const table = document.getElementById("table");

  input.addEventListener("change", () => {
    const file = input.files[0];
    if (!file) return;

    const fr = new FileReader();
    fr.onload = (e) => {
      const lines = e.target.result.split("\n");
      table.innerHTML = "";
      lines.forEach(line => {
        const tr = document.createElement("tr");
        line.split(",").forEach(cell => {
          const td = document.createElement("td");
          td.textContent = cell;
          tr.appendChild(td);
        });
        table.appendChild(tr);
      });
    };
    fr.readAsText(file, "utf-8");
  });
</script>
HTML
  • 効果: CSVファイルを読み込んで表形式で表示できます。

直感的な指針

  • FileReader = ユーザーが選んだファイルを読み込む道具。
  • 読み込み方法を選んで、onloadresult を使う。
  • テキスト・画像・バイナリの3パターンを覚えると応用が広がる。
タイトルとURLをコピーしました