如何通过FileSystem API从网站打开网络驱动器文件夹并设为默认路径
能否通过FileSystem API将网络共享驱动器设为文件选择器默认起始位置?
答案是可以,但有严格的安全限制,无法直接硬编码路径实现,具体细节如下:
首先明确:FileSystem API的
showOpenFilePicker/showDirectoryPicker方法支持startIn参数指定起始位置,但不能直接传入UNC路径(比如\\server\share)或映射驱动器号(比如Z:\)——浏览器出于安全考虑,禁止网页直接访问未授权的本地/网络文件系统路径。可行的实现步骤:
- 首次打开时,必须让用户手动选择一次目标网络共享文件夹,完成授权。
- 将用户授权后的文件系统句柄(DirectoryHandle)存储到本地(比如
localStorage)。 - 后续调用文件选择器时,将存储的句柄作为
startIn参数传入,就能直接从该网络共享目录打开窗口。
示例代码:
// 首次授权并存储句柄 async function setupDefaultNetworkDir() { const dirHandle = await window.showDirectoryPicker(); // 存储句柄的序列化值 localStorage.setItem('authorizedNetworkDir', JSON.stringify(await dirHandle.toString())); } // 后续打开文件选择器时使用默认目录 async function openFilePicker() { const storedHandleStr = localStorage.getItem('authorizedNetworkDir'); let dirHandle; if (storedHandleStr) { // 从存储的句柄启动选择器 dirHandle = await window.showDirectoryPicker({ startIn: storedHandleStr }); } else { // 首次打开,引导用户授权 dirHandle = await window.showDirectoryPicker(); localStorage.setItem('authorizedNetworkDir', JSON.stringify(await dirHandle.toString())); } // 处理选中的目录逻辑 console.log('选中的目录:', dirHandle.name); }额外注意事项:
- 这个特性目前在Chrome、Edge等Chromium内核浏览器中支持较好,Safari的支持度有限,需要做兼容性测试。
- 存储的句柄有效期依赖浏览器的存储策略,如果用户清除了浏览器数据,需要重新授权。
内容的提问来源于stack exchange,提问作者Standage
相关产品推荐
相关产品推荐

