需启用chrome实验性开关、手动授予权限、使用启动参数或开发者工具调试,才能在本地html中调用showdirectorypicker等api。

如果您在网页中尝试调用 showOpenFilePicker、showSaveFilePicker 或 showDirectoryPicker 等 Web File System API,但浏览器提示“Permission denied”或 API 调用直接失败,则可能是由于 Chrome 对 file system access 的默认限制未解除。以下是开启网页端文件系统访问权限的具体步骤:
一、启用 Chrome 实验性文件系统访问开关
Chrome 默认禁用 File System Access API 的完整行为,需手动启用底层实验性功能,否则即使页面调用合法也无法触发权限请求弹窗。
1、在 Chrome 地址栏中输入 chrome://flags/#file-system-access 并回车。
2、在页面顶部搜索框中输入 file system access,定位到“File System Access API”条目。
3、将该选项的下拉菜单从“Default”更改为 Enabled。
4、点击右下角的 Relaunch 按钮,重启浏览器使设置生效。

二、为当前站点手动授予本地文件系统权限
Chrome 以协议+域名+端口为单位独立管理文件系统访问授权,即使 API 已启用,也必须对当前访问源(如 http://localhost:3000 或 file:///C:/project/index.html)显式授予权限。
1、访问目标网页(确保已启用上一步的 Flag)。
2、点击地址栏左侧的锁形图标(或“不安全”标识),打开站点信息面板。
3、点击 站点设置 进入权限配置页。
4、向下滚动至“权限”区域,找到 Local file system 项(若未显示,请确认 Flag 已正确启用并重启)。
5、将该权限设为 Allow,关闭设置页后刷新页面。

三、使用启动参数解除不安全源限制(仅限本地开发)
当在 http://localhost、http://127.0.0.1 或 file:// 协议下调试时,Chrome 默认拒绝文件系统 API;添加特定启动参数可将指定源临时视为安全上下文。
1、关闭所有正在运行的 Chrome 进程(包括后台 chrome.exe,可通过任务管理器确认)。
2、右键 Chrome 快捷方式 → 选择“属性” → 在“目标”字段末尾添加空格及以下完整参数:--unsafely-treat-insecure-origin-as-secure="http://localhost:3000" --user-data-dir="C:/chrome-fs-dev" --allow-file-access-from-files(请将端口号替换为实际值,并确保 --user-data-dir 指向一个全新空白目录)。
3、点击“确定”保存,双击该快捷方式启动新实例。
4、访问 http://localhost:3000 后即可正常调用 showOpenFilePicker() 等方法,不再被拦截。

四、通过开发者工具强制模拟权限状态
在调试阶段,可绕过 UI 授权流程,直接在 DevTools 控制台中注入权限状态,用于快速验证 API 行为是否受权限模型影响。
1、打开目标网页,按 F12 打开开发者工具。
2、切换到 Application 选项卡 → 左侧边栏展开 Clear storage → 点击 Clear site data(可选,用于重置权限缓存)。
3、切换到 Console 选项卡,执行以下命令:navigator.permissions.query({name:'local-file-system' }).then(console.log),确认当前权限状态。
4、如需强制设为 granted(仅限调试环境),可执行:navigator.permissions.request({name:'local-file-system'}).then(console.log),观察返回结果。











