FileReader(+JQuery)を利用して複数ファイルを選択した画像を画面に表示させる
( Html )File API sample(jquery version)
file name: file size:
HTML5の勉強っす。
今回はFileRead()を利用してみた。って話。
まだ策定中のFile APIなのですが、これを利用するとjavascriptからファイル情報や内容を読み込んで アクセスができるようになるみたいですね。例をあげるとファイルをアップロードするときに予め対象の 画像情報を表示させといてから非同期で画像を保存する。的なこと簡単にできてしまうわけです。
現在はFirefoxでは実装されていてつかえるみたいなのですが、まだChromeで利用できないみたいですね。 ここいらへんで騒いでいます。
実際、まだ全体的にみても策定中のようで「FileWriter」なんてものもあるらしくてこれが決定!!というわけではない。とのこと。 なので、今後仕様が変わっていってしまうのは大いにあるようです。
だけどおもしろそうだったのでやってみた。
まずは、HTMLに
を記述してから複数ファイルを選択できるようにします。 (この時点でもうフラッシュいらないですね。はい。)
次は関数を呼ぶ。
// 読み込み用メソッド function readFile() { // タグからファイル情報を読み込む var files = document.getElementById("file").files; // 配列作成 var data = new Array(); // 選択ファイル分走査する for (var cnt=0;cnt複数選択したとき用にループしてファイルを走査する。
FileReaderCustomの中身でやっているものは
Onloadイベント処理の登録 ファイル情報を読み込んで画面に描画させる ここで画像情報を「reader.result」から取得してimgタグの「src」属性として登録するonprogressイベント処理の登録 現在処理中のファイル名を表示するloadedendイベントイベント処理の登録 ログ「onprogressで表示した」情報を削除するファイルを指定した形式にして情報を読取る できた!!これでボタンを押せば読み込みが始まります。 あとは非同期でデータをPOSTしてやればOK。
■感想 ・「input」タグのmultiple属性POSTしたらどうなるのかな? ・ファイルをアップするときになんていうかいい感じに連続的に表示できないかなーっておもった。 ・ロード中の画像はその画像上かどこかに身長情報載せたい。 ・クロスブラウザ対応できたら最高やね。。 ・後ろ側の通信しなきゃね。
■デモ