アップロードする前に画像のプレビューを表示する


116

私のHTMLフォームでは、たとえばfileタイプのファイルを入力しています。

 <input type="file" multiple>

次に、その入力ボタンをクリックして複数のファイルを選択しています。フォームを送信する前に、選択した画像のプレビューを表示したいと思います。HTML 5でそれを行う方法



回答:


264

HTML5にはFile API仕様が付属しており、ユーザーがローカルでファイルを操作できるアプリケーションを作成できます。つまり、実際にファイルをアップロードしなくても、ファイルをロードしてブラウザでレンダリングできます。File APIの一部は、Webアプリケーションがファイルの内容を非同期で読み取ることができるFileReaderインターフェイスです。

FileReaderクラスを使用して画像をDataURLとして読み取りsrc、画像タグの属性をデータURLに設定してサムネイルをレンダリングする簡単な例を次に示します。

HTMLコード:

<input type="file" id="files" />
<img id="image" />

JavaScriptコード:

document.getElementById("files").onchange = function () {
    var reader = new FileReader();

    reader.onload = function (e) {
        // get loaded data and render thumbnail.
        document.getElementById("image").src = e.target.result;
    };

    // read the image file as a data URL.
    reader.readAsDataURL(this.files[0]);
};

JavaScriptでのFile APIの使用に関する優れた記事を次に示します

以下のHTML例のコードスニペットは、ユーザーの選択から画像を除外し、選択したファイルを複数のサムネイルプレビューにレンダリングします。


2
アップロードのために画像の一部をキャンセルしてからフォームを送信する方法は?本当に助かります。
Hardik Sondagar

しかし、アップロードを防ぐために特定のファイルを削除する方法を知りたいです。それはいくつかの構造で定義されています。
Hardik Sondagar

4
ファイルのinput要素を無効にするだけで、アップロードされません!したがって、上記の例では、document.getElementById("uploadImage").disabled = true
Kamyar Nazeri

@KamyarNazeri FileReaderがavailabelでない場合、それはどうですか?
MichaelLuthor 2013年

1
@Nicholas「Show snippet section」の下のコードスニペットでは、実際に複数の画像を読み込んですべてプレビューできます
Kamyar Nazeri

20

ここでは、FileReader APIを使用してjQueryを実行しました。

HTMLマークアップ:

<input id="fileUpload" type="file" multiple />
<div id="image-holder"></div>

jQuery:

ここjQueryコードでは、最初にファイル拡張子を確認します。つまり、処理される有効な画像ファイルは、ブラウザのサポートFileReader APIがyesであるかどうかをチェックし、次に処理されるだけです。

$("#fileUpload").on('change', function () {

     //Get count of selected files
     var countFiles = $(this)[0].files.length;

     var imgPath = $(this)[0].value;
     var extn = imgPath.substring(imgPath.lastIndexOf('.') + 1).toLowerCase();
     var image_holder = $("#image-holder");
     image_holder.empty();

     if (extn == "gif" || extn == "png" || extn == "jpg" || extn == "jpeg") {
         if (typeof (FileReader) != "undefined") {

             //loop for each file selected for uploaded.
             for (var i = 0; i < countFiles; i++) {

                 var reader = new FileReader();
                 reader.onload = function (e) {
                     $("<img />", {
                         "src": e.target.result,
                             "class": "thumb-image"
                     }).appendTo(image_holder);
                 }

                 image_holder.show();
                 reader.readAsDataURL($(this)[0].files[i]);
             }

         } else {
             alert("This browser does not support FileReader.");
         }
     } else {
         alert("Pls select only images");
     }
 });

詳細記事:アップロードする前に画像をプレビューする方法、jQuery、ライブデモを使用したHTML5 FileReader()


1
あなたが明確varにするなら、悪い習慣を考慮しないでfor loopください?毎回for loop反復新しい変数がreaderdeclear ...になります
フェニックス

accept="image/*"<input>に属性を追加すると、画像以外のファイルタイプが選択されないようにするのに役立ちます。
8月

画像のプレビューとともに画像の名前を表示するにはどうすればよいですか?
Naveenbos

4


1

背景画像については、必ず使用してください url()

node.backgroundImage = 'url(' + e.target.result + ')';
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.