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);
文字を入力してから「保存」をクリックする
- ファイル名
- –
- サイズ
- –
- タイプ
- –
- 最終更新日時
- –