File APIを使ってディスクトップ上のテキストファイルを読み込む
まず、ファイルを読み込むためにはFileReaderインタフェースオブジェクトを取得する。
var fr = new FileReader();
ファイルからのデータ読み取りは次のFileReaderインタフェースのメソッドとプロパティを使う。
プロパティ/メソッド | 意味 |
---|---|
readfAsDataURL(blob) | ファイルのデータをDataURL形式で取り出す。Blobインタフェースオブジェクトを第1引数に指定する。 |
readAsText(blob,encoding) | ファイルのデータをテキスト形式で取り出す。Blobインタフェースオブジェクトを第1引数に指定する。オプションで文字エンコーディングを第2引数に指定できる。 |
readAsArryBuffer | ファイルのデータをバイナリ形式で取り出す。Blobインタフェースオブジェクトを第1引数に指定する |
abort()メソッド | ファイルのデータのロードを中止する |
resultプロパティ | readAsDataURL()、readAsText()、readAsArrayBuffer()が呼び出されると、このプロパティから所定のフォーマットでデータを取り出すことができる |
ファイル取得時のイベント
FileReaderインタフェースには次のイベントハンドラが定義されている。
イベントハンドラ | イベント名 | イベントの発生タイミング |
---|---|---|
onloadstart | loadstart | ファイルのロードが開始されたとき |
onprogress | progress | ファイルのロード中に連続して発生する |
onabort | abort | ファイルのロードが中止されたとき |
onerror | error | ファイルのロードに失敗したとき |
onload | load | ファイルのロードが成功して終了したとき |
onloadend | loadend | ファイルのロードのリクエスト処理が終了したとき。ただし、成功したときだけでなく、失敗したときも発生する |
HTML
<p>文字を入力してから「保存」をクリックする</p> <form> <textarea id="txt1" rows="5" cols="40"></textarea> <br><br> <input type="button" value="保存" id="exec"> </form> <div id="link"></div> <br> <p><input type="file" id="fin"></p> <dl class="file_att"> <dt>ファイル名</dt> <dd id="name">-</dd> <dt>サイズ</dt> <dd id="size">-</dd> <dt>タイプ</dt> <dd id="type">-</dd> <dt>最終更新日時</dt> <dd id="mdate">-</dd> </dl>
JavaScriot
function fsave(){ var txt = document.querySelector('textarea#txt1').value; txt = txt.replace(/\n/g, "\r\n"); // LF => CR LF var bb = new Blob([txt]); var url; if(window.navigator.msSaveBlob){ // IEの場合 window.navigator.msSaveOrOpenBlob(bb, 'savefile.txt'); } else { // IE以外 url = window.URL.createObjectURL(bb); document.querySelector('div#link').innerHTML = '<a href="' + url + '" target="_blank">' + url + '</a><br/>'; } } function init(){ $('#fin').change(function(){ // 選択されたファイルを表すFileオブジェクト var file = this.files[0]; if( !file ) { return; } // ファイルの各種情報を表示 document.querySelector('#name').textContent = file.name; document.querySelector('#size').textContent = file.size; document.querySelector('#type').textContent = file.type; document.querySelector('#mdate').textContent = file.lastModifiedDate; if (file.type.match('text.*')) { // file.typeが画像の場合にファイルを読み込む var fr = new FileReader(); // FileReaderオブジェクト fr.onload = function() { $('#txt1').text(fr.result); } fr.readAsText(file,"UTF-8"); // ファイルの読み込み } }); } window.addEventListener("DOMContentLoaded", function(){ document.querySelector('form #exec').addEventListener('click',fsave,false); init(); },false);
文字を入力してから「保存」をクリックする
- ファイル名
- –
- サイズ
- –
- タイプ
- –
- 最終更新日時
- –