FileSystemHandle: remove() 方法

安全上下文: 此功能仅在安全上下文(HTTPS)中可用,且支持此功能的浏览器数量有限。

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

实验性: 这是一项实验性技术
在生产中使用此技术之前,请仔细检查浏览器兼容性表格

非标准:此特性未标准化。我们不建议在生产环境中使用非标准特性,因为它们浏览器支持有限,并且可能会更改或被移除。但是,在没有标准选项的特定情况下,它们可以是合适的替代方案。

FileSystemHandle 接口的 remove() 方法请求从底层文件系统中移除由该句柄表示的条目。

remove() 方法允许您直接从句柄中删除文件或目录。如果没有此方法,您将不得不获取父目录的句柄,然后在该句柄上调用 FileSystemDirectoryHandle.removeEntry() 来删除它。

您还可以调用 Origin Private File System 的根目录上的 remove() 来清除其内容,之后会创建一个新的空 OPFS。

语法

js
remove()
remove(options)

参数

options 可选

一个指定移除选项的对象。可能的属性如下:

recursive 可选

一个布尔值,默认为 false。当设置为 true 且条目是目录时,其内容将被递归移除。

返回值

一个 Promise,成功时解析为 undefined

异常

InvalidModificationError DOMException

如果 recursive 设置为 false 且要移除的条目是带有子项的目录,则会抛出此异常。

NoModificationAllowedError DOMException

如果浏览器未能获取到条目的独占锁,则会抛出此异常。

NotAllowedError DOMException

如果 PermissionStatus 不是 granted,则会抛出此异常。

NotFoundError DOMException

如果找不到条目,则会抛出此异常。

示例

我们的 FileSystemHandle.remove() 演示(请参阅 源代码)是一个文件创建器应用程序。您可以在 <textarea> 中输入文本,然后按“保存文件” <button>,应用程序将打开一个文件选择器,允许您将该文本保存到您选择的文本文件中,存储在您的本地文件系统中。您也可以选择删除您创建的文件。

它不允许您查看创建文件的内容,并且在页面重新加载/关闭时不会与底层文件系统保持同步。这意味着如果您在重新加载或关闭选项卡之前不选择删除,应用程序创建的文件仍将存在于文件系统中。

文件选择器、文件句柄以及要创建的新文件本身,都是使用 window.showSaveFilePicker() 创建的。文本通过 FileSystemFileHandle.createWritable() 写入文件。

一旦在文件系统中创建了一个文件,就会在应用程序中创建一个条目(请参阅源代码中的 processNewFile())。

  • 文件句柄的引用存储在一个名为 savedFileRefs 的数组中,以便以后可以轻松引用。
  • 在 UI 中“已保存文件”标题下方会添加一个列表项,其中显示文件名以及一个“删除”按钮。

当按下“删除”按钮时,将运行 deleteFile() 函数,其代码如下:

js
async function deleteFile(e) {
  for (const handle of savedFileRefs) {
    if (handle.name === `${e.target.id}.txt`) {
      await handle.remove();
      savedFileRefs = savedFileRefs.filter(
        (handle) => handle.name !== `${e.target.id}.txt`,
      );
      e.target.parentElement.parentElement.removeChild(e.target.parentElement);
    }
  }
}

逐步讲解:

  1. 对于 savedFileRefs 数组中保存的每个文件句柄,我们检查其名称是否与触发事件的按钮的 id 属性匹配。
  2. 找到匹配项后,我们就对该句柄运行 FileSystemHandle.remove(),将文件从底层文件系统中删除。
  3. 我们还将匹配的句柄从 savedFileRefs 数组中删除。
  4. 最后,我们从 UI 中删除与该文件相关的列表项。

规范

此功能并非任何规范的一部分,但将来可能会成为标准。有关详细信息,请参阅 whatwg/fs#9

浏览器兼容性

另见