FileSystemHandle

基线 2023

新可用

2023 年 3 月起,此功能可在最新的设备和浏览器版本中使用。此功能可能无法在较旧的设备或浏览器中使用。

安全上下文:此功能仅在 安全上下文(HTTPS)中可用,在部分或所有 支持的浏览器 中可用。

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

FileSystemHandle文件系统 API 的一个接口,它表示文件或目录条目。多个句柄可以代表同一个条目。在大多数情况下,您不会直接使用 FileSystemHandle,而是使用它的子接口 FileSystemFileHandleFileSystemDirectoryHandle

基于 FileSystemHandle 的接口

以下是基于 FileSystemHandle 接口的接口列表。

FileSystemFileHandle

表示指向文件条目的句柄。

FileSystemDirectoryHandle

提供指向目录条目的句柄。

实例属性

kind 只读

返回条目类型。如果关联的条目是文件,则为 'file',如果关联的条目是目录,则为 'directory'

name 只读

返回关联条目的名称。

实例方法

isSameEntry()

比较两个句柄,查看关联的条目(文件或目录)是否匹配。

queryPermission() 实验性

查询当前句柄的当前权限状态。

remove() 实验性 非标准

请求从底层文件系统中删除句柄所代表的条目。

requestPermission() 实验性

请求文件句柄的读权限或读写权限。

示例

检查类型

以下代码允许用户从文件选择器中选择一个文件,然后测试返回的句柄是文件还是目录

js
// store a reference to our file handle
let fileHandle;

async function getFile() {
  // open file picker
  [fileHandle] = await window.showOpenFilePicker();

  if (fileHandle.kind === "file") {
    // run file code
  } else if (fileHandle.kind === "directory") {
    // run directory code
  }
}

查询/请求权限

以下异步函数在用户已授予文件句柄的读权限或读写权限时返回 true。如果未授予权限,则会请求权限。

js
// fileHandle is a FileSystemFileHandle
// withWrite is a boolean set to true if write

async function verifyPermission(fileHandle, withWrite) {
  const opts = {};
  if (withWrite) {
    opts.mode = "readwrite";
  }

  // Check if we already have permission, if so, return true.
  if ((await fileHandle.queryPermission(opts)) === "granted") {
    return true;
  }

  // Request permission to the file, if the user grants permission, return true.
  if ((await fileHandle.requestPermission(opts)) === "granted") {
    return true;
  }

  // The user did not grant permission, return false.
  return false;
}

比较条目

以下函数将单个条目与条目数组进行比较,并返回一个新数组,其中已删除所有匹配的条目。

js
function removeMatches(fileEntry, entriesArr) {
  const newArr = entriesArr.filter((entry) => !fileEntry.isSameEntry(entry));

  return newArr;
}

规范

规范
文件系统标准
# api-filesystemhandle

浏览器兼容性

BCD 表格仅在浏览器中加载

另请参阅