改訂第5版 JavaScript ポケットリファレンス (古籏一浩著)を元に練習。
テキストファイルやバイナリファイルを読み込みます。
IE 10(一部機能のみ)、Firefox 3.6、Safari 5(一部機能のみ)、Google Chrome 11以降で対応しています。
参照ボタンを押して、ローカルファイルを1つ選択してください。続けて表示ボタンを押すとテーブルにファイル情報が表示されます。
日付表示を追加(File API 仕様 日本語訳より)。iPhoneのSafariでは日付が正しく表示されません。
ファイル選択
名前: | |
サイズ: | |
種類: | |
日付: | |
識別子: |
ファイル選択 <input type="file" id="targetFiles" size="50"> <input type="button" value="ファイル情報を表示" onClick="getFileInfo()"> <script type="text/javascript"> function getFileInfo() { var myFile = document.getElementById("targetFiles").files[0]; document.getElementById("file_info1").innerHTML = myFile.name; //ファイル名 document.getElementById("file_info2").innerHTML = myFile.size + " bytes"; //ファイルサイズ document.getElementById("file_info3").innerHTML = myFile.type; //MIME Type document.getElementById("file_info4").innerHTML = myFile.lastModified.toLocaleDateString(); //日付
document.getElementById("file_info5").innerHTML = myFile.urn; //URN } </script>
参照ボタンを押してローカルドライブからテキストファイルを選びます。読込ボタンはファイルのエンコードに合わせてUTF-8かシフトJISか選択してください。エンコードが正しくない場合は文字化けします。
ファイル選択
(ファイル内容を表示)
ファイル選択 <input type="file" id="targetTextFiles" size="50"> <input type="button" value="読込(UTF-8)" onClick="getTextFile('utf-8')"> <input type="button" value="読込(シフトJIS)" onClick="getTextFile('shift_jis')"> <span id="view_text"></span> <script type="text/javascript"> function getTextFile(encd) { var myFile = document.getElementById("targetTextFiles").files[0]; if (myFile.type.indexOf("text") == 0) { var reader = new FileReader(); reader.onload = function(evt){ var txt = evt.target.result; //ファイル内容を読み出し txt = txt.replace(/</g, "<"); //置き換え txt = txt.replace(/>/g, ">"); //置き換え txt = "<p>MIME : " + myFile.type + "</p><pre>" + txt + "</pre>"; document.getElementById("view_text").innerHTML = txt; } reader.readAsText(myFile, encd); } } </script>
参照ボタンを押してローカルドライブからファイルを選びます。読込ボタンを押すとバイナリファイルをテキスト化して表示します。
ファイル選択
(ファイル内容を表示)
ファイル選択 <input type="file" id="targetBinFiles" size="50"> <input type="button" value="読込" onClick="getBinFile()"> <span id="view_bin"></span> <script type="text/javascript"> function getBinFile() { var myFile = document.getElementById("targetBinFiles").files[0]; var reader = new FileReader(); reader.onload = function(evt){ var allData = evt.target.result; //ファイル内容を全て取得 var bin = ""; for (var i=0; i<allData.length; i++) { var s = allData.charCodeAt(i).toString(16); //16進数で表示 if (s.length == 1) s = "0" + s; //桁数を二桁に揃える if (i % 16 == 15) { bin += s + "<br>"; //16個目で改行 } else { bin += s + " "; } } bin = "<p>MIME : " + myFile.type + "</p><pre>" + bin + "</pre>"; document.getElementById("view_bin").innerHTML = bin; } reader.readAsBinaryString(myFile); } </script>
バイナリファイルの読み込みスクリプトに必要な部分を入れ換えています。
ファイル選択
ファイル選択 <input type="file" id="targetImgFiles" size="50"> <input type="button" value="表示" onClick="getImgFile()"> <img src="LNtitle.gif" id="view_image"> <script type="text/javascript"> function getImgFile() { var myFile = document.getElementById("targetImgFiles").files[0]; if (myFile.type.indexOf("image") == 0) { var reader = new FileReader(); reader.onload = function(evt){ document.querySelector("#view_image").src = reader.result; } reader.readAsDataURL(myFile); } } </script>
上記の画像の読み込みにエラーイベントをイベントリスナーで組み込みます。(既に組み込み済み)
// 読み込みエラー時の処理
reader.addEventListener('error', function(e) {
// エラーコードに対応するメッセージを準備
var errors = ['','指定のファイルが見つかりません。','読み込み権限がありません。','処理が中断されました。','読み込み中にエラーが発生しました。','ファイルサイズが大きすぎます。']
// エラーコードに応じてメッセージを表示
alert(errors[reader.error.code]);
}, true);
参考:http://lostlinksearch.net/blog/2012/11/javascriptで任意のテキストを任意のファイル名でダウン/