私のHTMLフォームでは、たとえばfileタイプのファイルを入力しています。
<input type="file" multiple>
次に、その入力ボタンをクリックして複数のファイルを選択しています。フォームを送信する前に、選択した画像のプレビューを表示したいと思います。HTML 5でそれを行う方法
私のHTMLフォームでは、たとえばfileタイプのファイルを入力しています。
<input type="file" multiple>
次に、その入力ボタンをクリックして複数のファイルを選択しています。フォームを送信する前に、選択した画像のプレビューを表示したいと思います。HTML 5でそれを行う方法
回答:
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例のコードスニペットは、ユーザーの選択から画像を除外し、選択したファイルを複数のサムネイルプレビューにレンダリングします。
document.getElementById("uploadImage").disabled = true
ここでは、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()
var
にするなら、悪い習慣を考慮しないでfor loop
ください?毎回for loop
反復新しい変数がreader
declear ...になります
accept="image/*"
<input>に属性を追加すると、画像以外のファイルタイプが選択されないようにするのに役立ちます。