javascript - 我可以将特定驱动器(例如 ,"D:\")设置为 showOpenFilePicker 的默认目录吗?

标签 javascript file directory file-system-access-api

我们有一个 Java (JSP) Web 应用程序,我希望(好吧,客户端)希望当他们上传文件时,根据特定条件,文件选择器直接在 D 驱动器根目录中打开。另外,当他们下载文件时,默认情况下会自动将文件下载到同一个 D (USB) 驱动器中(当然不是通过浏览器设置来普遍下载)。

我知道由于安全原因这是不可能的,但我最近看到了这个文件系统访问 API,我正在尝试了解什么是可能的。

好吧,显然我们可以使用

async function fileOpen() {
            const fileHandle = await window.showOpenFilePicker({
                startIn: 'documents'
            });
        }

但在 startIn每当我尝试设置 D:\ 时,属性或 WellKnownDirectories 以外的任何内容我收到错误:

TypeError: Failed to execute 'showOpenFilePicker' on 'Window': Failed to read the 'startIn' property from 'FilePickerOptions': The provided value 'D:\' is not a valid enum value of type WellKnownDirectory.

那么这样的事情可能吗?从 <input type=file> 打开的文件选择器不支持为默认目录设置任何值,因此这就是我查看文件系统访问 api 的原因。

请记住,这是一个受控环境并且 D: 的存在驱动有保障

最佳答案

使用 showOpenFilePicker/showSaveFilePicker 可以做的最好的事情(即不请求访问目录)是在选择器之间保持相同的目录:

  1. 无法showOpenFilePicker中请求初始路径,因此第一次打开文件选择器时用户必须导航到D:/他们自己。
    (您可以提供 WellKnownDirectory("documents"/...) startIn) 来选择用户从哪里开始
  2. 第二次打开文件选择器时,您可以通过提供相同的 id 来请求浏览器在同一位置打开文件选择器
await showOpenFilePicker({ id:"thisGonnaBeDDrive" })
// this opens default directory (socuments or whatever)
// user opens `D:/foo/myfile.bar`
await showOpenFilePicker({ id:"thisGonnaBeDDrive" })
// this opens *the same* directory used last time - `D:/foo/`
await showSaveFilePicker({ id:"thisGonnaBeDDrive" })
// this opens *the same* directory used last time - `D:/foo/`
  • 或者,您可以使用 FileSystemHandle 在同一位置打开文件选择器
  • let [handle] = await showOpenFilePicker()
    // user opens `D:/foo/myfile.bar`
    showOpenFilePicker({ startIn: handle })
    // this opens directory of *the handle* - `D:/foo/`
    

    startIn 句柄优先于 id
    id 优先于 WellKnownDirectory("documents"/...) startIn

    关于javascript - 我可以将特定驱动器(例如 ,"D:\")设置为 showOpenFilePicker 的默认目录吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/76539311/

    相关文章:

    c++ - 如何在C++中递归创建超过MAX_PATH的目录?

    java - 如何更改 Netbeans 6.9 中的默认项目目录(文件夹)?

    powershell - 将命题重命名为目录标题的末尾

    javascript - 如何使用 JavaScript 将 Canvas 的背景颜色设置为白色?

    python - 从文件导入和使用 JSON 字符串时出现 ValueError

    javascript - 在按钮处于事件状态时更改按钮的 css

    asp.net-mvc - ASP.NET Web API 文件保存为 "BodyPart_3ded2bfb-40be-4183-b789-9301f93e90af"

    file - Yii2 下载文件功能

    javascript - 使用 indexOf 匹配精确的字符串

    javascript - 无法使用 JavaScript 解析器解析 JSON。方括号