tauri支持从$APPCONFIG, $APPDATA, $APPLOCALDATA, $APPCACHE, $APPLOG, $AUDIO, $CACHE, $CONFIG, $DATA, $LOCALDATA, $DESKTOP, $DOCUMENT, $DOWNLOAD, $EXE, $FONT, $HOME, $PICTURE, $PUBLIC, $RUNTIME, $TEMPLATE, $VIDEO, $RESOURCE, $APP, $LOG, $TEMP 访问并读或文件夹和文件,具体措施如下
编辑
tauri.conf.json内的tauri.allowlist.fs{ "tauri": { "allowlist": { "fs": { "all": true, // enable all FS APIs "readFile": true, "writeFile": true, "readDir": true, "copyFile": true, "createDir": true, "removeDir": true, "removeFile": true, "renameFile": true, "exists": true } } } }可以直接
all: true来开放所有tauri文件api,也可以单独开放某个api编辑
scope开放具体访问权限{ "tauri": { "allowlist": { "fs": { "scope": ["$APPDATA/img/*"] } } } }注意,这里开放了
$APPDATA下的database访问权限,这样可以阻止程序访问任何路径,除了database从js中访问
import { readBinaryFile, BaseDirectory } from '@tauri-apps/api/fs'; // 可以是任何api // Read the image file in the `$APPDATA/avatar.png` path const contents = await readBinaryFile('img/avatar.png', { dir: BaseDirectory.AppData }); // 注意!一定要加上BaseDirectory.AppData开放了哪个目录权限,就用
dir: BaseDirectory来指定访问路径,至少用绝对路径访问的方法我还没有找到,当然,这种相对路径访问的方式更加安全
我一开始尝试的是绝对路径访问,结果一直报无法找到目录,各种更改配置文件都无法解决,最后才发现关键在 { dir: BaseDirectory.AppData }上,与 exe文件同路径的话(也就是安装目录),是 $Resource ,通过它可以访问安装目录下的文件。