FileReader的觸發事件:
http://www.w3.org/TR/FileAPI/#eventshttp://www.w3.org/TR/FileAPI/#event-handler-attributes-section
共有6種事件如下
event handler attribute | event handler event type | 處發時機 |
---|---|---|
onloadstart | loadstart | When the read starts 開始讀取 |
onprogress | progress | While reading (and decoding) blob, and reporting partial Blob data (progess.loaded/progress.total) 讀取並回報部份資料中 |
onabort | abort | When the read has been aborted. For instance, by invoking the abort() method. 中止讀取,使用abort()時 |
onerror | error | When the read has failed. 讀取失敗 |
onload | load | When the read has successfully completed. 讀取成功 |
onloadend | loadend | When the request has completed (either in success or failure) request結束的時候(不管結果是成功或失敗均會觸發) |
FileReader的狀態常數:
http://www.w3.org/TR/FileAPI/#dfn-readyStatereadyState屬性是目前檔案讀取的狀態,有下列幾種值
- EMPTY (0):FileReader物件初建立。
- LOADING (1):讀取中。
- DONE (2):讀取結束(成功、失敗、中止...)
FileReader progess事件的進度資料:
http://www.w3.org/TR/progress-events/要知道檔案讀取的進度,可使用progess事件提供的以下屬性
- lengthComputable:檔案大小是否可知,true或false
- loaded:已讀取的大小
- total:檔案大小
範例:
以下範例,當選擇檔案後,會立即讀取檔案,觸發相關事件,若要觸發abort事件,可選擇較大的檔案,在尚未讀取完成時,按下「中止(abort)」按鈕,即會觸發abort事件。(執行的流程,使用console.log輸出相關訊息,須開啟console查看。)
<!DOCTYPE html> <html> <head> <script> var fr; function aa() { var file = document.getElementById('ff').files[0]; //console.dir(file); if (file) { var msg = []; msg.push('檔名:' + file.name , '大小:' + file.size , '檔案類型:' + file.type , '修改日期:' + file.lastModifiedDate.toLocaleDateString() ); document.getElementById('msg').innerHTML = msg.join("<"+"br"+">"); //讀取檔案 fr = new FileReader(); console.log('readyState:'+fr.readyState); fr.onloadstart = function(){ console.log('開始讀取:onloadstart'); console.log('readyState:'+fr.readyState); } fr.onprogress = function(evt){ console.log('讀取中:onprogress'); if(evt.lengthComputable){ console.log('進度:' + Math.round((evt.loaded/evt.total)*100) + "%"); } console.log('readyState:'+fr.readyState); } fr.onabort = function(){ console.log('讀取中止:onabort');//執行abort()時 console.log('readyState:'+fr.readyState); } fr.onload = function(evt){ console.log('讀取成功:onload'); console.log('readyState:'+fr.readyState); }; fr.onerror = function(evt){ console.log('讀取失敗:onerror'); console.log('readyState:'+fr.readyState); }; fr.onloadend = function(){ console.log('讀取結束(不管讀取成功或失敗):loadend'); console.log('readyState:'+fr.readyState); } fr.readAsDataURL(file); console.log('readyState:'+fr.readyState); } } function my_abort(){ fr.abort(); } </script> </head> <body> <input type=file id="ff" onchange="aa()"/> <input type="button" onclick="my_abort()" value="中止(abort)"> <div id="msg"></div> </body> </html>
備註:
- 以上範例可知,
一進入onloadstart、onprogress:readyState為1。
一進入onabort、loadend、onload:readyState為2。 - error事件的錯誤類型
http://www.w3.org/TR/FileAPI/#dfn-error-codes
http://www.w3.org/TR/domcore/#error-names-0
HTML5 File API 讀取檔案內容
沒有留言:
張貼留言