electron进程通信之文件保存

ipcMain模块是EventEmitter类的一个实例。在主进程中使用时,它处理从渲染器进程(网页)发送的异步和同步消息。从渲染器发送的消息将发送到此模块。

在渲染进程创建一个保存按钮,并向主进程发送消息:
test.vue

<template>
    <a-button icon="branches" @click="exportExcel">导出</a-button>
</template>
<script>
import {ipcRenderer} from 'electron'
export default {
    methods: {
        exportCsv() {
            ipcRenderer.send('exportCsv');
        }
    }
</script>

主进程接收消息后创建文件保存窗口,用户在点击保存时回传给渲染进程用户选择的路径
src/main/index.js

import {app, BrowserWindow, ipcMain, dialog} from 'electron'
ipcMain.on('exportCsv', () => {
    dialog.showSaveDialog({
        title: '导出',
        filters: [
            {name: 'All', extensions: ['*']},
        ]
    }, res => {
        mainWindow.webContents.send('exportCsv', res);
    })
})

渲染进程接收主进程发送过来的路径后保存文件到该位置即可完成用户一次文件保存过程

import {parseAsync} from 'json2csv'
import fs from 'fs'
let csv = [{"car": "Audi", "price": 40000, "color": "blue"}]
let ops = ['car', 'price', 'color']
ipcRenderer.on('exportCsv', (event, message) => {
    parseAsync(csv, {ops}).then(csv => {
        fs.writeFile(message + '.csv', csv, err => {
            if (err) throw err;
            this.$message.success('导出成功');
        });
    }).catch(err => console.error(err));
})

永久链接: https://blog.qianxiaoduan.com/archives/1519

发表评论

电子邮件地址不会被公开。 必填项已用*标注