FileList

Baseline 已廣泛支援

此特性已相當成熟,可在許多裝置和瀏覽器版本上使用。自 ⁨2015 年 7 月⁩以來,各瀏覽器均已提供此特性。

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

FileList 介面表示 HTML <input> 元素的 files 屬性返回的此類物件;這允許您訪問使用 <input type="file"> 元素選擇的檔案列表。它還用於在使用拖放 API 將檔案拖放到 Web 內容時使用的檔案列表;有關此用法的詳細資訊,請參閱 DataTransfer 物件。

所有 <input> 元素節點上都有一個型別為 FileListfiles 屬性,允許訪問此列表中的項。例如,如果 HTML 包含以下檔案輸入:

html
<input id="fileItem" type="file" />

以下程式碼行將節點檔案列表中的第一個檔案作為 File 物件獲取。

js
const file = document.getElementById("fileItem").files[0];

這個介面曾是 建立不可修改列表的嘗試,並且至今仍然被支援,以免破壞現有程式碼。現代 API 使用基於 JavaScript 陣列 的型別來表示列表結構,從而提供了許多陣列方法,同時對其使用施加了額外的語義(例如,使其項只讀)。

這些歷史原因並不意味著開發者應該避免使用 FileList。您不會自己建立 FileList 物件,而是從 HTMLInputElement.files 等 API 獲取它們,而這些 API 沒有被棄用。但是,請注意與實際陣列在語義上的差異。

例項屬性

length 只讀

一個只讀值,指示列表中檔案的數量。

例項方法

item()

返回一個 File 物件,表示檔案列表中指定索引處的那個檔案。

示例

記錄檔名

在此示例中,我們將記錄使用者選擇的所有檔案的名稱。

HTML

html
<input id="myfiles" multiple type="file" />
<pre class="output">Selected files:</pre>

CSS

css
.output {
  overflow: scroll;
  margin: 1rem 0;
  height: 200px;
}

JavaScript

js
const output = document.querySelector(".output");
const fileInput = document.querySelector("#myfiles");

fileInput.addEventListener("change", () => {
  for (const file of fileInput.files) {
    output.innerText += `\n${file.name}`;
  }
});

結果

規範

規範
File API
# filelist-section
HTML
# dom-input-files-dev

瀏覽器相容性

另見