JavaScriptでinput type=”file”で画像をアップした際にプレビューを表示する方法

JavaScriptでinput type="file"で画像をアップした際にプレビューを表示する方法JavaScript

今回は<input type="file">をクリックした際にアップした画像をそのまま表示するプレビュー的な機能の作り方を解説します。

 

スポンサーリンク

ファイルアップ時のプレビューを表示する方法

HTMLはこれだけです。<img>srcが入っていませんがjsで追加するので大丈夫です。

<input type="file" id="input">
<img id="img">

 

jsは以下のように書けばokです。

document.getElementById('input').addEventListener('change', (e) => {
  const file = e.target.files[0]; // ファイル本体

  // エラー回避
  if(!file) {
    return;
  }
  const reader = new FileReader();
  reader.onload = (e) => {
    document.getElementById('img').src = e.target.result; // 読み込み完了時にData URIをsrcに渡す
  };
  reader.readAsDataURL(file); // 画像をData URIとして読み込む
});

これをコピペしてもらえばそのまま動くのですが一応解説しておきます。

<input type="file">にはchangeイベントを指定できます。

ファイル本体はe.target.files[0]で取得できます。FileListという形で取得されるので[0]とする必要があります。

if(!file)の部分はファイルをアップロードしようとしてキャンセルするとコンソールにエラーが出てしまうので、それを回避するために入れています。

new FileReader()<input type="file">でアップロードされたファイルを読み取る機能です。読み取った画像はreadAsDataURL(file)でData URIというURLっぽい形で取得できます。reader.onloadで取得が終わったタイミングの処理が書けるので、<img>srce.target.resultを入れたらokです。

(中身がどんなものか気になる人はconsole.log(e.target.result)してみてください。data:image/png;base64,xxxxxxxxxというbase64エンコードされたインラインのURLで表す形になっています)。

 

new FileReader()readAsDataURL()は普段あまり使わないので馴染みがない人も多いと思います。気になる人はMDNも見てみてください。

>>FileReader – Web API | MDN

>>FileReader.readAsDataURL() – Web API | MDN

 

まとめ

読み込んだ画像をその場で表示させるのは難しそうな印象ですが、やり方を知っていればそこまで難しくない印象です。

フロントエンド開発をしていると割と実装することが多いので知っておくといいですね。

ZennでCSS設計の
本を書きました!

「CSS設計をちょっと勉強したけど
結局よくわからなかった…」
そんな人に読んでほしい一冊です!

読んでみる
スポンサーリンク
JavaScript
スポンサーリンク
でざなり