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] } }