FileSystem Access API仅能创建.txt文件,.ini等扩展名报错求助
问题描述
开发Next.js应用时,使用FileSystem Access API获取用户指定文件夹的FileSystemDirectoryHandle,调用getFileHandle创建文件时,仅.txt扩展名成功,其他扩展名(如.ini)抛出错误:
desLoad failed: TypeError: Failed to execute 'getFileHandle' on 'FileSystemDirectoryHandle': Name is not allowed.
可正常执行的代码:
desTestHandle = await newBuildingHandle.getFileHandle('desload.txt', { create: true, });
执行报错的代码:
desTestHandle = await newBuildingHandle.getFileHandle('desload.ini', { create: true, });
此前两周.ini文件可正常创建,本周出现异常。
解决思路
- 检查浏览器权限更新:部分浏览器近期可能调整了FileSystem Access API的文件扩展名限制,尤其是系统相关扩展名(比如
.ini属于系统配置文件类)。可尝试在浏览器设置中重置该网站的文件系统权限,重新授权文件夹访问。 - 验证文件名合法性:确认文件名是否包含浏览器或系统禁止的特殊字符,哪怕是隐形字符(如空格、全角符号)。先尝试创建
test.ini这类极简文件名测试,排除文件名本身的问题。 - 检查浏览器版本兼容性:查看浏览器是否有版本更新,新版本可能对API安全策略做了调整。尝试降级或升级浏览器版本,对比测试结果。
- 确认文件夹权限范围:确保获取的
FileSystemDirectoryHandle拥有读写权限,而非只读。可通过queryPermission方法检查并申请权限:const permission = await newBuildingHandle.queryPermission({ mode: 'readwrite' }); if (permission !== 'granted') { await newBuildingHandle.requestPermission({ mode: 'readwrite' }); } - 测试自定义扩展名:尝试创建
.config或.custom这类非系统关联的扩展名,判断是仅.ini被限制,还是所有非.txt扩展名都受影响,缩小问题范围。 - 清除Next.js开发缓存:开发环境下缓存可能导致异常,执行
next clean清除缓存后重启开发服务再测试。
内容的提问来源于stack exchange,提问作者Tyler Emel
相关产品推荐
相关产品推荐

