FileReader api爲用戶提供了方法去讀取一個文件或者一個二進制大對象,而且提供了事件模型讓用戶能夠操做讀取後的結果。c++
// window, worker中可用 [Constructor, Exposed=Window,Worker] // 實現EventTarget的FileReader接口聲明 interface FileReader: EventTarget { // 異步的讀取方法 // 直接讀取二進制大對象爲ArrayBuffer類型 void readAsArrayBuffer(Blob blob); // 讀取爲文本,第二個參數可指定編碼類型 void readAsText(Blob blob, optional DOMString label); // 讀取爲base64格式 void readAsDataURL(Blob blob); // 中斷讀取 void abort(); // 狀態常量 // 尚未加載任何數據 const unsigned short EMPTY = 0; // 數據正在加載中 const unsigned short LOADING = 1; // 已完成所有的讀取請求 const unsigned short DONE = 2; // 只讀,獲取常量中的某一個狀態 readonly attribute unsigned short readyState; // 返回文件結果,只讀的,只有在讀取結束後纔有效 // 數據的格式取決於讀取操做是由哪一個方法發起的 readonly attribute (DOMString or ArrayBuffer)? result; // 若是讀取時發生錯誤,只讀的 readonly attribute DOMError? error; // 事件方法屬性 // 當讀取開始時的事件 attribute EventHandler onloadstart; // 當進行時的事件 attribute EventHandler onprogress; // 當讀取時的事件 attribute EventHandler onload; // 當取消時的事件 attribute EventHandler onabort; // 當錯誤時的事件 attribute EventHandler onerror; // 當讀取完成的事件 attribute EventHandler onloadend; };
當FileReader構造器被調用的時候,用戶代理必須返回一個新的FileReader對象。該構造器必須在Window 或者 WorkerGlobalScope 環境下可用.api
下列的內容是事件處理屬性和他們的事件處理類型:異步
事件處理屬性 | 事件處理類型 |
onloadstart | loadstart |
onprogress | progress |
onabort | abort |
onerror | error |
onload | load |
onloadend | loadend |
FileReader對象有三種狀態,在readyState屬性中,當觸發getting訪問操做,必然會返回一個FileReader的當前狀態,而他的值必然是下面三個中的其中一個:函數
EMPTY (數字值爲 0)this
當FileReader對象唄建立的時候,是不存在pending讀取狀態的,由於此時沒有任何讀取方法被調用。這個空狀態是建立FileReader時候的初始狀態,直到某個讀取方法被調用。
LOADING (數字值爲 1)編碼
當一個文件或者二進制大對象正在被讀取,某一個讀取方法正在進行的時候,而且沒有錯誤發生的時候,狀態爲loading
DONE (數字值爲2)代理
當文件對象或者二進制大對象被讀入內存的時候,或者發生一個讀取錯誤的時候,或者用戶調用了abort()操做的時候,這個時候,FileReader再也不進行讀取,若是狀態被設置爲了完成,這意味着某一個讀取方法被調用過了
FileReader接口有三個異步讀取方法,readAsArrayBuffer, readAsText, and readAsDataURL,他們能夠把文件讀入內存,若是多個讀取方法同時被調用(一個FileReader對象上),用戶代理必須在任何讀取進行中的時候拋出一個非法狀態錯誤code
當訪問result屬性,該屬性將會返回一個原始二進制數據或者一個ArrayBuffer對象或者null以表示所讀取文件的內容.對象
當調用該方法,用戶代理將會執行如下步驟繼承
處理讀取到結束符(EOF),執行如下步驟:
該方法接受一個額外的可選參數label,他是一個字符串,代表讀取成的文檔應該以何種形式編碼,若是提供了該參數,當在調用該方法過程當中,將會以該種編碼形式編碼讀取到的文檔。
當該方法被調用,用戶代理將會執行如下過程:
處理讀取到結束符(EOF),執行如下步驟:
當該方法被調用,用戶代理執行如下步驟:
處理讀取到結束符(EOF),執行如下步驟:
首先,這些錯誤步驟是用於處理讀取過程當中得到失敗緣由的。
當調用該方法,用戶代理作如下事情:
FileReader上有三個異步方法,FileReaderSync有三個同步方法,URL對象上有createObjectURL,createFor兩個靜態方法,他們都接受一個叫作blob的參數,這一章節將闡述該參數的定義
blob
這個形式參數是指調用時的一個二進制大對象的實參,而且他必然是一個非底層文件系統拿到的File/Filelist/Blob對象的引用
當咱們經過readAsText(bolb, label)方法讀取blob對象的時候,必須遵循:
FileReader對象就是本身所接受事件的event target。。。由於從第一章節咱們知道這個FileReader API是繼承自 EventTarget的。。。。
當按照規範說明觸發某個進度事件(onload什麼的,event對象的構造函數是ProgressEvent)的時候,將遵循如下內容:
const reader = new FileReader(); reader.onload = function (e) { console.log(e.target === this) // true console.log(this === reader) // true console.log(e.bubbles === false) // true console.log(e. cancelable === false) // true console.log(e.cancelBubble === false) // true console.log(console.log(e.constructor.toString())) // function ProgressEvent() { [native code] } }