input type=”file”で複数選択した画像をアップロード前にプレビュー表示(jQuery)(html5)
2015年8月4日
multipleを使わない(1つだけ)であれば、input type=”file”で画像アップロード前にプレビュー表示(jQuery)の方法で、プレビューが可能ですが、multipleを指定した場合に、複数画像をプレビュー表示する必要があったのでメモ。
複数選択できるhtmlを用意
用意するhtmlについては、以前書いたこの(input type=”file”で複数ファイル選択と形式を指定(html5))エントリーを参照で。
ま、下記のような感じで
<form action="/uploads" enctype="multipart/form-data"> <input type="file" id="icon" name="icon" multiple="multiple" accept="image/*"> </form> <div id="preview" style="display:none"></div>
プレビュー用にdivを追加しました。
プレビュー用のjs
やってる処理としては、ほぼ単一ファイルの時と同じ。
$(function(){
$('#icon').change(function(){
if ( !this.files.length ) {
return;
}
$('#preview').text('');
var $files = $(this).prop('files');
var len = $files.length;
for ( var i = 0; i < len; i++ ) {
var file = $files[i];
var fr = new FileReader();
fr.onload = function(e) {
var src = e.target.result;
var img = '<img src="'+ src +'">';
$('#preview').append(img);
}
fr.readAsDataURL(file);
}
$('#preview').css('display','block');
});
});
基本的には単一のファイルの時と同じですが、filesが複数入っているのでforで回しながらimgタグをプレビューに追加していく感じで。
上記のjsを読みこめば、ファイルが選択された時点でプレビューが表示されるはずです。