Tauri2.0本地实现导入导出,有坑!

最近做数据的导入导出,本来是想做后端操作,但是因为数据量不是很大,所以本地操作应该是最优的选择。

导入

  1. 使用window.showOpenFilePicker方法选择文件
  2. 获取文件对象数据
  3. 读取文件数据
  4. 通过接口批量导入数据
js 复制代码
async function handleImport() {
    let msgImportLoading;
    try {
        msgImportLoading = message.loading('导入文件中...', 0);
        const [fileHandle] = await window.showOpenFilePicker({
            types: [
                {
                    description: '密码数据',
                    accept: {
                        'application/json': ['.json']
                    }
                }
            ]
        });
        const file = await fileHandle.getFile();
        const fileText = await file.text();
        await SystemApi.saveData(fileText)
        msgImportLoading();
        message.success('导入数据成功');
    } catch (error) {
        msgImportLoading();
        if (error instanceof SyntaxError) {
            message.error('解析文件失败');
        } else {
            message.error('导入文件失败');
        }
    }
}

导出

Tauri1.0版本的导出和2.0版本的导出差距较大,大家可以看一下文件系统插件迁移。

  1. 先配置权限,找到src-tauri/capabilities/default.json文件,添加读写的权限
json 复制代码
{
    "permissions": [
        ...
        {
            "identifier": "fs:read-all"
        },
        {
            "identifier": "fs:write-all"
        },
    ]
}
  1. 通过plugin-dialog对话框选择存储的文件路径
  2. 通过writeTextFile方法存储文件数据
js 复制代码
import {save} from '@tauri-apps/plugin-dialog';
import {writeTextFile, BaseDirectory} from '@tauri-apps/plugin-fs';

async function handleExport() {
    let loading = message.loading('下载中...', 0);
    try {
        let passwordData = dataSource.value;
        const filePath = await save({
            title: '请选择保存位置',
            filters: [{
                name: 'JSON',
                extensions: ['json']
            }]
        })
        if (!filePath) {
            loading();
            return false;
        }
        await writeTextFile(filePath, JSON.stringify(passwordData));
        loading();
        message.success('导出密码成功!');
    } catch (e) {
        loading();
        console.log(e);
        message.error('导出异常!');
    }
}
相关推荐
Alice-YUE5 分钟前
前端 × AI:从 Cursor 到 Transformer,一份完整认知路径
前端·人工智能·transformer·ai编程·前端开发·cursor
Code_Solitude27 分钟前
C语言:关于二维数组的作业总结
java·c语言·前端
acd120091 小时前
前端随笔:数据明明变了,Vue 页面就是不更新
前端·javascript·vue.js
vx_Biye_Design1 小时前
springboot一站式旅游管理平台81037-计算机课程设计、毕业设计
java·vue.js·spring boot·后端·课程设计·express·旅游
vx_Biye_Design1 小时前
springboot宠物寄养服务预约与监管系统82684-计算机课程设计、毕业设计
java·vue.js·spring boot·elasticsearch·课程设计·express·宠物
vx_Biye_Design1 小时前
springboot小学生英语学习APP62773-计算机课程设计、毕业设计
java·vue.js·spring boot·后端·python·学习·课程设计
vx_Biye_Design2 小时前
expressDeepSeek社团咨询助手的学生社团管理系统60746-计算机课程设计、毕业设计
java·vue.js·spring boot·后端·python·课程设计·express
传人2 小时前
悬停旋转放大和位移效果如何写
前端·javascript·css
vx_Biye_Design3 小时前
springboot宠物领养与救助平台64334-计算机课程设计、毕业设计
java·vue.js·spring boot·后端·mysql·课程设计·宠物
vx_Biye_Design3 小时前
django就业信息推荐系统61953-计算机课程设计、毕业设计
java·vue.js·spring boot·python·架构·django·课程设计