electron-vue中利用FS模块进行本地文件操作


一、本地指定路径创建文件夹


const path = require('path');
const fs = require('fs');
//创建本地文件储存的文件夹
this.createdFolder({
    devPath:'../../../database/userdb/OA_Files',
    proPath:'../../../OA_Files'
});
/**
 * 创建本地文件夹
 */
createdFolder(pathData){
    let folderPath;
    //开发环境跟生产环境路径不同
    if(process.env.NODE_ENV === 'development'){
        folderPath = path.join(__dirname,pathData.devPath);
    }else{
        folderPath = path.join(__dirname,pathData.proPath);
    }
    //文件夹不存在才创建
    if (!fs.existsSync(folderPath)){
        fs.mkdir(folderPath,(err)=>{
            console.log(err);
        });
    }
},

二、本地指定路径创建文件

const path = require('path');
const fs = require('fs');
/**
 * 创建文件
 * @return {Promise<unknown>}
 */
export function creatFile() {
    return new Promise(async resolve => {
        let filePath = path.join(__dirname, `../userdb/OA_Files/oaid_${dbName}/${dbName}msg.db`);
        try {
            //文件数据读取
            fs.readFileSync(filePath);
            resolve({code: 200, message: '文件读取成功'});
        } catch (e) {
            //文件数据写入
            fs.writeFileSync(filePath, '');
            resolve({code: 200, message: '文件创建成功'});
        }
    })
}

三、接口返回文档流数据转成二进制并存入本地

const fs = require('fs');
imgFile({
    url: '/filestorage/file/download.action',
    method: 'get',
    params: {id: fileData.fileId},
    headers: {
        'Content-Type': 'application/x-www-form-urlencoded;charset=UTF-8'
    },
    responseType: 'blob'
}).then(async res=>{
    let blob = new Blob([res.data]);
    let filePath;
    if(process.env.NODE_ENV === 'development'){
        filePath = path.join(__dirname, `../../../../database/userdb/OA_Files/oaid_${this.userInfo.id}/file/${fileData.fileName}`);
    }else{
        filePath = path.join(__dirname, `../../../OA_Files/oaid_${this.userInfo.id}/file/${fileData.fileName}`);
    }
    const buffer = Buffer.from(await blob.arrayBuffer());
    fs.writeFileSync(filePath, buffer);
    resolve(path.toNamespacedPath(filePath).replace('\\\\?\\',''));
})

四、打开本地文件目录

 /**
 * 打开本地文件目录
 */
openFileCatalogue(){
    try {
        let filePath = 'C:\\Users\\admin\\Desktop\\重点案件 (2).xlsx';
        //读取文件看文件是否还存在
        fs.readFileSync(filePath);
        //渲染器shell模块提供与桌面集成相关的功能。
        const {shell} = require('electron');
        shell.showItemInFolder(filePath);
    }catch (e) {
        console.log('文件不存在');
    }
},
  • 10
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
你可以使用 Node.js 的 `fs` 模块来读取和操作文件系统,然后在渲染进程使用 `ipcRenderer` 模块向主进程发送消息,由主进程处理文件操作。 以下是一个简单的示例代码: 在渲染进程: ```javascript const { ipcRenderer } = require('electron') // 点击按钮时发送消息给主进程 document.getElementById('openFileButton').addEventListener('click', () => { ipcRenderer.send('open-file') }) // 监听主进程的回复消息 ipcRenderer.on('file-opened', (event, filePath) => { console.log(`打开文件: ${filePath}`) }) ``` 在主进程: ```javascript const { app, BrowserWindow, ipcMain, dialog } = require('electron') const path = require('path') const fs = require('fs') let mainWindow function createWindow () { mainWindow = new BrowserWindow({ width: 800, height: 600, webPreferences: { nodeIntegration: true } }) mainWindow.loadFile('index.html') mainWindow.on('closed', function () { mainWindow = null }) } app.on('ready', createWindow) // 监听渲染进程发送的消息 ipcMain.on('open-file', (event) => { dialog.showOpenDialog(mainWindow, { properties: ['openFile'] }).then((result) => { if (!result.canceled) { const filePath = result.filePaths[0] // 读取文件 fs.readFile(filePath, 'utf-8', (err, data) => { if (err) { dialog.showErrorBox('错误', err.message) } else { // 发送文件内容给渲染进程 event.reply('file-opened', filePath) } }) } }).catch((err) => { dialog.showErrorBox('错误', err.message) }) }) ``` 在渲染进程,当点击按钮时,会发送一个 `open-file` 消息给主进程。主进程会弹出一个文件选择对话框,用户选择文件后,主进程会读取文件内容,然后发送一个 `file-opened` 消息给渲染进程,同时将文件内容作为参数传递给该消息。在渲染进程,我们监听 `file-opened` 消息,然后通过参数获取到文件路径和内容,进行相应的处理。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值