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

瀏覽器相容性

另見