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('导出异常!');
    }
}
相关推荐
IT_陈寒1 小时前
SpringBoot 3.2 实战:这5个新特性让你的开发效率提升50%!
前端·人工智能·后端
水星梦月1 小时前
跨平台开发中的图形渲染:Canvas与View+CSS的性能分析与决策路径
前端·css·图形渲染·canvas
yuanyxh1 小时前
前端仔的一次运维实践
linux·运维·前端
望获linux4 小时前
【Linux基础知识系列:第一百五十九篇】磁盘健康监测:smartctl
linux·前端·数据库·chrome·python·操作系统·软件
十一吖i5 小时前
vue3表格显示隐藏列全屏拖动功能
前端·javascript·vue.js
冰暮流星7 小时前
css之线性渐变
前端·css
徐同保7 小时前
tailwindcss暗色主题切换
开发语言·前端·javascript
mapbar_front7 小时前
大厂精英为何在中小公司水土不服?
前端
生莫甲鲁浪戴7 小时前
Android Studio新手开发第二十七天
前端·javascript·android studio