我们有一个 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
可以做的最好的事情(即不请求访问目录)是在选择器之间保持相同的目录:
- 您无法在
showOpenFilePicker
中请求初始路径,因此第一次打开文件选择器时用户必须导航到D:/
他们自己。
(您可以提供WellKnownDirectory
("documents"/...)startIn
) 来选择用户从哪里开始 - 第二次打开文件选择器时,您可以通过提供相同的
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/