HTMLInputElement: webkitdirectory 属性

HTMLInputElement 接口的 webkitdirectory 属性反映了 webkitdirectory HTML 属性,该属性指示 <input type="file"> 元素只能选择目录而不是文件。

选择目录时,该目录及其所有内容的层级结构都会包含在选定的项目集中。可以通过 webkitEntries 属性获取选定的文件系统条目。

注意:该属性在规范中命名为 webkitdirectory,这是因为它最初是 Google Chrome 特有的 API。

一个布尔值;如果 <input> 元素应该只允许选择目录,则为 true;如果只应选择文件,则为 false

描述

webkitdirectory 设置为 true 会导致输入元素向用户提供目录供选择,而不是文件。用户选择目录后,返回的 files 中的每个 File 对象的 File.webkitRelativePath 属性都会设置为相对于所选祖先目录的路径。例如,考虑以下文件系统:

PhotoAlbums
├── Birthdays
│   ├── Jamie's 1st birthday
│   │   ├── PIC1000.jpg
│   │   └── PIC1044.jpg
│   └── Don's 40th birthday
│       ├── PIC2343.jpg
│       └── PIC2356.jpg
└── Vacations
    └── Mars
        ├── PIC5556.jpg
        ├── PIC5684.jpg
        └── PIC5712.jpg

如果用户选择 PhotoAlbums 目录,则文件列表将包含每个文件的 File 对象。PIC2343.jpg 的条目将具有 webkitRelativePath PhotoAlbums/Birthdays/Don's 40th birthday/PIC2343.jpg。这使得即使 FileList 是扁平的,也可以确定选定目录的层级结构。

注意:webkitRelativePathChromium < 72 中的行为有所不同。有关详细信息,请参阅 此 bug

示例

在此示例中,将显示一个目录选择器,允许用户选择一个或多个目录。当发生 change 事件时,将创建并显示所选目录层级结构中所有文件的列表。

HTML

html
<input type="file" id="file-picker" name="fileList" webkitdirectory multiple />
<ul id="listing"></ul>

JavaScript

js
document.getElementById("file-picker").addEventListener("change", (event) => {
  let output = document.getElementById("listing");
  for (const file of event.target.files) {
    let item = document.createElement("li");
    item.textContent = file.webkitRelativePath;
    output.appendChild(item);
  }
});

结果

规范

规范
File and Directory Entries API
# dom-htmlinputelement-webkitdirectory

浏览器兼容性

另见