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 访问并读或文件夹和文件,具体措施如下

  1. 编辑 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

  2. 编辑 scope开放具体访问权限

    {
      "tauri": {
        "allowlist": {
          "fs": {
            "scope": ["$APPDATA/img/*"]
          }
        }
      }
    }
    

    注意,这里开放了 $APPDATA下的 database访问权限,这样可以阻止程序访问任何路径,除了 database

  3. 从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 ,通过它可以访问安装目录下的文件。