FileReader

Baseline 已广泛支持

此特性已相当成熟,可在许多设备和浏览器版本上使用。自 ⁨2015 年 7 月⁩以来,各浏览器均已提供此特性。

注意:此功能在 Web Workers 中可用。

FileReader 接口允许 Web 应用程序使用 FileBlob 对象来指定要读取的文件或数据,从而异步读取存储在用户计算机上的文件(或原始数据缓冲区)的内容。

File 对象可以从用户使用 <input type="file"> 元素选择文件后返回的 FileList 对象获得,或者从拖放操作的 DataTransfer 对象获得。FileReader 只能访问用户明确选择的文件内容;它不能通过文件路径从用户的文件系统中读取文件。要通过文件路径读取客户端的文件系统中的文件,请使用 文件系统访问 API。要读取服务器端文件,请使用 fetch(),并在读取跨域内容时需要 CORS 权限。

EventTarget FileReader

构造函数

FileReader()

返回一个新的 FileReader 对象。

有关详细信息和示例,请参阅 使用 Web 应用程序中的文件

实例属性

FileReader.error 只读

一个 DOMException,表示读取文件时发生的错误。

FileReader.readyState 只读

一个指示 FileReader 状态的数字。该数字是以下值之一:

名称 描述
EMPTY 0 尚未加载任何数据。
LOADING 1 当前正在加载数据。
DONE 2 整个读取请求已完成。
FileReader.result 只读

文件的内容。此属性仅在读取操作完成后才有效,数据的格式取决于用于启动读取操作的方法。

实例方法

FileReader.abort()

中止读取操作。返回时,readyState 将为 DONE

FileReader.readAsArrayBuffer()

开始读取指定的 Blob 的内容,完成后,result 属性将包含一个代表文件数据的 ArrayBuffer

FileReader.readAsBinaryString() 已弃用

开始读取指定的 Blob 的内容,完成后,result 属性将包含文件中的原始二进制数据作为字符串。

FileReader.readAsDataURL()

开始读取指定的 Blob 的内容,完成后,result 属性将包含代表文件数据的 data: URL。

FileReader.readAsText()

开始读取指定的 Blob 的内容,完成后,result 属性将包含文件内容作为文本字符串。可以指定一个可选的编码名称。

事件

使用 addEventListener() 或通过将事件监听器分配给此接口的 oneventname 属性来监听这些事件。当 FileReader 不再使用时,使用 removeEventListener() 移除事件监听器,以避免内存泄漏。

abort

当读取被中止时触发,例如因为程序调用了 FileReader.abort()

error

当读取因错误而失败时触发。

load

当读取成功完成时触发。

loadend

当读取完成(无论成功与否)时触发。

loadstart

当读取开始时触发。

progress

在读取数据的过程中定期触发。

示例

使用 FileReader

此示例直接在浏览器中读取并显示文本文件的内容。

HTML

html
<h1>File Reader</h1>
<input type="file" id="file-input" />
<div id="message"></div>
<pre id="file-content"></pre>

JavaScript

js
const fileInput = document.getElementById("file-input");
const fileContentDisplay = document.getElementById("file-content");
const messageDisplay = document.getElementById("message");

fileInput.addEventListener("change", handleFileSelection);

function handleFileSelection(event) {
  const file = event.target.files[0];
  fileContentDisplay.textContent = ""; // Clear previous file content
  messageDisplay.textContent = ""; // Clear previous messages

  // Validate file existence and type
  if (!file) {
    showMessage("No file selected. Please choose a file.", "error");
    return;
  }

  if (!file.type.startsWith("text")) {
    showMessage("Unsupported file type. Please select a text file.", "error");
    return;
  }

  // Read the file
  const reader = new FileReader();
  reader.onload = () => {
    fileContentDisplay.textContent = reader.result;
  };
  reader.onerror = () => {
    showMessage("Error reading the file. Please try again.", "error");
  };
  reader.readAsText(file);
}

// Displays a message to the user
function showMessage(message, type) {
  messageDisplay.textContent = message;
  messageDisplay.style.color = type === "error" ? "red" : "green";
}

结果

规范

规范
File API
# APIASynch

浏览器兼容性

另见