File system access api DomeException:当前上下文中的用户代理或平台不允许该请求

File system access api DomeException:当前上下文中的用户代理或平台不允许该请求,file-system-access-api,File System Access Api,尝试使用的getFile()方法访问文件时,可能会发生以下错误:doException:当前上下文中的用户代理或平台不允许该请求。 此代码适用于: async function getTheFile() { // open file picker [fileHandle] = await window.showOpenFilePicker(pickerOpts); // get file contents const fileData = await fileHandle.ge

尝试使用的
getFile()
方法访问文件时,可能会发生以下错误:
doException:当前上下文中的用户代理或平台不允许该请求。

此代码适用于:

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

  // get file contents
  const fileData = await fileHandle.getFile();
}
但是,如果存储
文件句柄
(例如,使用IndexedDB)的目的是即使在页面刷新后仍保持对该文件的访问,则它将不起作用。刷新页面后,
getFile()
方法将抛出DomeException错误


发生了什么?

刷新页面(或关闭应用程序的所有选项卡)时,浏览器不再具有访问该文件的权限

有一种方法可用于
文件系统句柄
,可用于在尝试读取文件之前确定是否可以访问该文件

示例来自:

一旦权限==
被授予,此函数将返回true;如果权限被
拒绝
提示
,则此函数将重新提示用户访问

async function verifyPermission(fileHandle, readWrite) {
  const options = {};
  if (readWrite) {
    options.mode = 'readwrite';
  }
  // Check if permission was already granted. If so, return true.
  if ((await fileHandle.queryPermission(options)) === 'granted') {
    return true;
  }
  // Request permission. If the user grants permission, return true.
  if ((await fileHandle.requestPermission(options)) === 'granted') {
    return true;
  }
  // The user didn't grant permission, so return false.
  return false;
}