Tauri应用中React组件调用fetch读取本地文件报跨域错误怎么办?
在用Tauri + React开发桌面应用时,我在React组件里用fetch读取本地JSON文件,结果报CORS错误。虽然Tauri文档说可以安全访问文件系统,但代码一直失败:
import { useEffect } from 'react';
function DataFetcher() {
useEffect(() => {
fetch('file:///src/data/config.json')
.then(res => res.json())
.then(data => console.log(data))
.catch(err => console.error('Fetch失败:', err));
}, []);
return <div>加载中...</div>;
}
我试过把路径改成相对路径和绝对路径都不行,控制台提示:”Failed to load given URL. Reason: Request is not allowed by plugin configuration”。是不是Tauri需要特殊配置才能让fetch访问本地文件?或者应该用别的API代替?
而且 Tauri 的安全策略默认也不允许这种随意的 file 协议访问,所以报错 "Request is not allowed by plugin configuration"。
正确做法是:用 Tauri 提供的 fs 模块来读文件,这才是安全且推荐的方式。
代码给你:
关键点:
- 要在 tauri.conf.json 里配置 fs 插件权限,确保启用
allowList.readTextFile:- 文件路径不是随便写 file:///,要把你需要的文件放在 src-tauri/resources 目录下,然后通过相对资源路径读取。或者你也可以用
resolveResource来定位。- 如果你真想放外部文件,可以用
path模块拼接真实路径,比如用appDataDir()获取用户数据目录再拼 config.json。总之,别折腾 fetch + file 协议了,这条路在 Tauri 里走不通,用它的 API 才是正解。