HTML5 FileReader讀取Blob對象API詳解

 使用FileReader對象,web應用程序能夠異步的讀取存儲在用戶計算機上的文件(或者原始數據緩衝)內容,可使用File對象或者Blob對象來指定所要讀取的文件或數據.其中File對象能夠是來自用戶在一個<input>元素上選擇文件後返回的FileList對象,也能夠來自由拖放操做生成的 DataTransfer對象,還能夠是來自在一個HTMLCanvasElement上執行mozGetAsFile()方法後的返回結果。html

建立FileReader對象,html5

var reader = new FileReader();

屬性:web

1.result  jsval 讀取的文件內容,這個屬性只在讀取操做完成以後纔有效,而且數據的格式取決於讀取操做發起的方法。只讀windows

2.readyState  unsigned short  當前狀態值,0---EMPTY 尚未記載任何數據。1--LOADING 正在被記載。2---DONE 已完成所有的讀取請求。api

3.error  DOMError 在讀取文件時發生的錯誤,只讀。數組

方法:瀏覽器

void abort() ,停止讀取操做,返回時,readyState屬性值爲DONE異步

void readAsArrayBuffer( in Blob blob), 讀取文件爲 ArrayBuffer測試

void readAsBinaryString(in Blob blob),讀取文件爲二進制字符串,IE瀏覽器不支持該方法編碼

void readAsDataURL(in Blob blob),讀取文件爲DataURL ,關於DataURL

void readAsText(in Blob blob,[optional] in DOMString encoding),指定文件編碼(默認值utf-8),讀取Blob爲字符串

事件監聽:

onabort 當讀取操做被終止時調用.

onerror 當讀取操做發生錯誤時調用.

onload 當讀取操做成功完成時調用.

onloadend 當讀取操做完成時調用,無論是成功仍是失敗.該處理程序在onload或者onerror以後調用.

onloadstart 當讀取操做將要開始以前調用.

onprogress 在讀取數據過程當中週期性調用.

事件傳遞的參數對象:

//e.target  FileReader
//e.total   文件總大小,字節
//e.type    上傳狀態‘load’
//e.timeStamp  還不知道

瀏覽器兼容性

Desktop、Mobile

Feature Firefox (Gecko) Chrome Internet Explorer* Opera* Safari
Basic support 3.6 (1.9.2) 7 10 Not supported Not supported

*IE9有一個File API Lab.Opera從11.10開始部分支持該API.

實例1,檢測瀏覽器是否支持FileReader

//1.檢測瀏覽器是否支持FileReader
//測試結果,IE>=10,Google,FF
if (window.FileReader) {
    var fr = new FileReader();
    console.info(fr);
} else {
    alert("Not supported by your browser!");
}

實例2. FileReader讀取File對象,讀取文件實例

<div class="container">
    <input type="file" id="file" multiple />
    <input type="button" id="btn1" value="選擇上傳文件" onclick="showFiles();" />
    <h4>
        選擇文件以下:
    </h4>
    <blockquote></blockquote>
</div>
var fileBox = document.getElementById('file');
function showFiles() {
    //獲取選擇文件的數組
    var fileList = fileBox.files;
    for (var i = 0; i < fileList.length; i++) {
        var file = fileList[i];
        readFile(file);
    }
}
//讀取文件內容
//reader.readAsArrayBuffer   //將讀取結果 封裝成 ArrayBuffer ,若是想使用通常須要轉換成 Int8Array或DataView
//reader.readAsBinaryString  //在IE瀏覽器中不支持改方法
//reader.readAsText     該方法有兩個參數,其中第二個參數是文本的編碼方式,默認值爲 UTF-8
//reader.readAsDataURL  //讀取結果爲DataURL 
//reader.readyState    上傳中的狀態
function readFile(file) {
    var reader = new FileReader();
    //reader.readAsText(file);
    //中文windows系統 txt 文本多數默認編碼 gbk
    reader.readAsText(file, 'gbk');
    console.info(reader.readyState); // 狀態值 1
    reader.onload = function (e) {
        console.info(e); //事件對象
        //e.target  FileReader
        //e.total   文件總大小,字節
        //e.type    上傳狀態‘load’
        //e.timeStamp  還不知道

        console.info(reader.readyState); //狀態值 2
        var result = reader.result;
        $('.container blockquote').text(result);
    }
}

更多實例:

相關文章
相關標籤/搜索