INPUT 要素の type="file" 属性に加えて multiple 属性を追加する事によって、ローカルのファイルを複数選択が可能になります。 ここでは、画像表示を前提としていますが、ファイルの種類を accept 属性によって指定が可能です。指定方法もいろいろあるので、コンボボックスで選択可能にしました。 (ファイルを選択するダイアログで、accept 属性に指定したファイルグループが作成されて選択された状態になります) ファイル選択後の処理の流れ ファイルを選択後、INPUT 要素のオブジェクトの files プロパティに複数のファイルの情報がセットされるので、その配列に対して for ループ処理を作成します。 一回のループ毎に FileReader オブジェクトを作成して、それに対するイベントを登録します。そして、その FileReader オブジェクトに readAsDataURL で、INPUT 要素が保持する各ファイルの blob オブジェクトをセットします。 そうすると、イベントが実行されて、jQuery の appendTo メソッドによって、それぞれの画像用の img 要素が作成されて行きます。 イベント内でオリジナルファイル名を参照する FileReader オブジェクトに name プロパティとして this.files[i].name をセットしておくと、後から this で参照が可能になります( ここでは title 属性にセットしました )
<script src="//ajax.googleapis.com/ajax/libs/jquery/3.1.0/jquery.min.js"></script> <script> $(function(){ $("#myfile").on("change", function(){ $("#images").html(""); for( i = 0; i < this.files.length; i++ ) { // FileReader は毎回作成(同時に複数のファイルを扱えない) var reader = new FileReader(); // オリジナルファイル名をプロパティとして追加しておく reader.name = this.files[i].name; // FileReader に画像が読み込まれた時のイベント $(reader).on("load", function () { // div の中に img 要素を追加してその都度 this.result(ArrayBuffer) をセット $("<img>").appendTo("#images") .prop( {"src": this.result, "title": this.name } ) // title にはオリジナルファイル名 .css("width", "100px"); }); // 上記イベントを発動するための処理( this.files[i] は blob ) if (this.files[i]) { reader.readAsDataURL(this.files[i]); } } }); // ファイルの種類の選択 $("#accept").on("change", function(){ $("#myfile").prop("accept", $(this).val() ); }); }); </script> <select id="accept"> <option value="image/jpeg">MIME 指定 image/jpeg</option> <option value="text/plain">MIME 指定 text/plain</option> <option value=".txt,.jpg,.png,.zip">拡張子指定 .txt,.jpg,.png,.zip</option> <option value="image/*">画像全て image/*</option> <option value="video/*">動画全て video/*</option> <option value="audio/*">音声全て audio/*</option> </select> <br> <input type="file" id="myfile" multiple accept="image/jpeg"> <div id="images"></div>
デモ実行
タグ:jquery FileReader
|
【jQueryの最新記事】
- jQuery の $.get を使用した ajax のテンプレート
- jquery.balloon.js を使用した簡単なバルーン( マウスオーバーで表示する追加説明用 )の作り方
- jQuery による link 要素の追加と削除を bootstrap.css でリアルタイムチェック
- FileReader で、ローカルの CSV を読み込んで(shift_jis)、jQuery でテーブルを作成して表示する
- jQuery + bootstrap.js で ajax の GET と POST を使用した DB テーブルを更新する UI テンプレート
- jQuery : 貼り付けるだけで、ページ右下にページ先頭にジャンプするリンクを表示させる( アニメーションは無し )
- STYLE 要素を追加して、CSS テキストをセットして、jQuery で CSS に important 指定を追加する。
- ページの右下に、ページの先頭へ移動するボタンを追加する(ページの先頭から 200px までは、スクロールボタンを表示しない)
- テーブルのTDをクリックしたら、INPUT で値を変更可能にして、元の値と違うものにはフラグを立てる処理を絵で書いて説明してみました
- jQuery を使用してサーバから取得した JSON データを元にテーブルを作成し、その後から列を加工する
- JSON 配列を WEB より読み出して jQuery で動的にテーブルを作成して表示する
- jQuery UI の Datepicker Widget のオプション
- FormData を使用して、jQuery で配列として PHP に送る
- 必要なデータを隠しリストボックス( multiple ) に jQuery で追加して配列として PHP に送る
- Android Studio の追加日本語化用に、キャラクタセットに依存しないコード文字列を作成するツールを作成しました
- 画像ファイルが存在した時のみ、表示する jQuery の記述
- jQuery で mobile(スマホ) かどうかのチェックをしたくて調べたら、Stack Overflow の記事でいろんな方法が答えられていました。
- とても面白くて簡単な jQuery のクリックしたコンテンツ以外を暗転(Blackout) するサンプル
- jQuery で、左右に並んだリストボックスの右側のデーターをダブルクリックしたら左へ転送してソートする処理
- jQuery でコンボボックスの選択されたオプションのテキストを取得する場合、optgroup を使っている場合は子孫選択でないと取得されないというお話 / find(子孫) と children(直..