FileReader API

FileReader 对象允许 Web 应用程序 异步读取 存储在用户计算机上的文件(或原始数据缓冲区)的内容。

FileReader API 接口提供了一个异步 API,使用该 API 可以在浏览器主线程中异步访问文件系统,读取文件中的数据。

其中 File 对象可以是:

  • 来自用户在一个 <input> 元素上选择文件后返回的 FileList 对象
  • 也可以来自拖放操作生成的 DataTransfer 对象
  • 还可以是来自一个 HTMLCanvasElement 上执行 mozGetAsFile() 方法后返回结果

基本用法

通过 new 操作符构造 FileReader 对象。

const fileReader = new FileReader();

属性和方法

属性

以下属性均为只读属性,不可更改。

属性说明
FileReader.errorDOMException 类型,表示在读取文件时发生的错误
FileReader.readyState表示 FileReader 状态码EMPTY=0 还没有加载任何数据;LOADING=1 数据正在被加载;DONE=2 已完成全部的读取请求)
FileReader.result文件的内容,该属性仅在 读取操作完成后 才有效,数据的格式取决于使用哪个方法来启动读取操作。

事件处理

对 FileReader 对象调用其中某一种读取方法后,可使用以下事件处理方式跟踪其读取进度。

事件说明
FileReader.onprogress处理 progress 事件,该事件在 读取 Blob 时触发。
FileReader.onloadstart处理 loadstart 事件,该事件在读取操作 开始 时触发。
FileReader.onabort处理 abort 事件,该事件在读取操作 被中断 时触发。
FileReader.onload处理 load 事件,该事件在读取操作 完成 时触发。
FileReader.onloadend处理 loadend 事件,该事件在读取操作 结束(要么成功,要么失败)时触发。
FileReader.onerror处理 error 事件,该事件在读取操作 发生错误 时触发。

✅ 因为 FileReader 继承自 EventTarget,所以所有这些事件也可以通过 addEventListener 方法使用。

方法

这些方法都是异步读取文件的。无论读取成功或失败,方法并不会返回读取结果,这一结果存储在 result 属性中。

方法说明
FileReader.abort()中止读取操作,在返回时,readyState 属性为 DONE
FileReader.readAsText(file [, encoding])开始读取指定的 Blob 中的内容,一旦完成,result 属性中将包含一个字符串以表示所读取文件的内容
FileReader.readAsDataURL(file)开始读取指定的 Blob 中的内容,一旦完成,result 属性中将包含一个 data:URL 格式的字符串以表示所读取文件的内容
FileReader.readAsArrayBuffer()开始读取指定的 Blob 中的内容,一旦完成,result 属性中保存的将是被读取文件的 ArrayBuffer 数据对象
FileReader.readAsBinaryString(file)开始读取指定 Blob 中的内容,一旦完成,result 属性中将包含所读取文件的 原始二进制数据

应用示例

const reader = new FileReader();
reader.addEventListener('loadend', function() {
// reader.result 包含了 TypedArray 格式的 Blob 内容
});
reader.readAsArrayBuffer(blob);
blob = new Blob(['This is my blob content.'], { type: 'text/plain' });
// 读取为文本
reader.readAsText(blob);

参考资料: