Electron教程(五)读取本地文件内容, icpMain icpRenderer 之间的交互

68 篇文章 3 订阅
15 篇文章 35 订阅
这篇博客介绍了如何在Electron应用中使用主进程读取本地文件内容,并通过ipcMain和ipcRenderer进行进程间通信,展示文件内容。主要步骤包括:主进程使用fs模块读取文件,然后通过webContents.send广播事件;渲染进程通过ipcRenderer监听事件,接收并处理文件内容。此外,文章还提及了一个实际应用案例,即根据用户选择的文件在页面上显示和处理文件内容。
摘要由CSDN通过智能技术生成

Electron教程(五)读取本地文件内容, ipcMain ipcRenderer 之间的交互

Electron教程(一)什么是 Electron,由来、适用场景 和 Electron 的环境搭建
Electron教程(二)启动过程:主进程,渲染进程是什么
Electron教程(三)如何打包 electron 程序:electron-forge 的使用教程
Electron教程(四)使用 Vue Browser 版,创建小工具应用
Electron教程(五)读取本地文件内容, ipcMain ipcRenderer 之间的交互
Electron教程(六)应用菜单设置例子
Electron教程(七)结语

读取本地文件的原理: electron 的主进程里可以运行所有node 的功能,包含通过 os 读取系统信息,通过 fs 读取文件和目录。

那么如何实现文件的读取和展示呢? 因为渲染进程是无法直接跟系统直接交互的,所以分两个部分:

  • 主进程负责读取文件
  • 主进程把读到的文件内容 -> 传递给渲染进程,再由渲染进程负责展示

知道如何使用这个,几乎所有其它的 node 相关的功能也都知道该如何使用了

node 具体可以做些什么,可以看它的 API 文档

node API: https://nodejs.org/dist/latest-v12.x/docs/api/

一、主进程读取文件内容

使用 fs.readFile() 读取文件内容,该方法传入三个参数

  1. 文件路径
  2. 参数:编码什么的
  3. callback 执行文件读取后执行的方法
    callBack 方法能取得两个参数:
    • 第一个参数是是否有错误
    • 第二个参数是文件内容

官方说明: fs.readFile() API

请添加图片描述

main.js

const fs = require('fs')

// 文件路径:Windows 也可以使用 `/` 不需要使用 `\\` fs一样能处理,
let filePath = '/Users/Kyle/Library/Rime/test.dict.yaml'

fs.readFile(filePath, {encoding: 'utf-8'}, (err, res) => {
    if(err){
        console.log(err)
    } else {
        // 获取到文件内容后,广播 'showFileContent' 事件
        // 并传递两个参数 filePath 和 文件内容 res
        // 这里的参数可以传递任意多个,根据自己需要来就行了
        // 具体关于 ipcMan ipcRenderer 的使用可以看前面的教程内容
        mainWindow.webContents.send('showFileContent', filePath ,res)
    }
})

二、渲染进程接收主进程的事件信息

然后渲染进程使用 ipcRenderer 监听 showFileContent 这个事件,获取到主进程传递的 filePath 和 文件内容 res,渲染进程就可以根据需要展示文件内容了。

监听的时候,第一个参数是事件相关的 event,后面就是事件里传递的参数了,可以多个。

ipcRenderer.on('showFileContent', (event, filePath, res) => {
    // filePath 获取到的就是上面主进程的 filePath
    // res 就是主进程获取到的文件内容
    // 根据自己需要做相关处理就可以了
})

三、例子

比如我正在做的一个应用的需求是用户点击菜单中的对应文件,页面内载入文件并对文件内容做相关处理,得到词条数据。
关于菜单的设置,下一个教程会介绍。

项目地址:https://github.com/KyleBing/wubi-dict-editor

效果是这样的

请添加图片描述

要使用Electron和Node.js在浏览器中打开本地视频,你可以使用Node.js的`fs`模块来读取本地视频文件,然后将文件路径作为`<video>`标签的`src`属性值,最后使用Electron的`BrowserWindow`模块来创建一个包含`<video>`标签的窗口。 具体步骤如下: 1. 在你的Electron项目目录下,创建一个视频文件夹,并将你的本地视频文件放入该文件夹中。 2. 在你的JavaScript文件中,使用`fs`模块读取本地视频文件,示例代码如下: ```javascript const { app, BrowserWindow } = require('electron'); const path = require('path'); const url = require('url'); const fs = require('fs'); let mainWindow; function createWindow() { mainWindow = new BrowserWindow({ width: 800, height: 600, webPreferences: { nodeIntegration: true, }, }); const filePath = path.join(__dirname, '/videos/video.mp4'); // 视频文件路径 const fileExists = fs.existsSync(filePath); if (fileExists) { mainWindow.loadURL(url.format({ pathname: path.join(__dirname, 'index.html'), protocol: 'file:', slashes: true, })); mainWindow.webContents.on('did-finish-load', () => { mainWindow.webContents.send('play-video', filePath); }); } else { console.error('视频文件不存在'); } mainWindow.on('closed', () => { mainWindow = null; }); } app.on('ready', createWindow); app.on('window-all-closed', () => { if (process.platform !== 'darwin') { app.quit(); } }); app.on('activate', () => { if (mainWindow === null) { createWindow(); } }); ``` 其中,`filePath`是你本地视频文件的路径,`fileExists`变量用于判断视频文件是否存在。 3. 在你的HTML文件中,创建一个包含`<video>`标签的页面,示例代码如下: ```html <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>My Video Player</title> </head> <body> <video id="video-player" width="640" height="360" controls> Your browser does not support the video tag. </video> <script src="./renderer.js"></script> </body> </html> ``` 其中,`<video>`标签的`id`属性为`video-player`,`controls`属性用于显示视频控制条。 4. 在你的renderer.js文件中,使用`ipcRenderer`模块来接收主进程发送的视频文件路径,并将其作为`<video>`标签的`src`属性值,示例代码如下: ```javascript const { ipcRenderer } = require('electron'); ipcRenderer.on('play-video', (event, filePath) => { const videoPlayer = document.getElementById('video-player'); videoPlayer.src = `file://${filePath}`; }); ``` 其中,`ipcRenderer.on('play-video', ...)`用于接收主进程发送的视频文件路径,`videoPlayer.src`用于将其作为`<video>`标签的`src`属性值。 5. 运行JavaScript文件,即可通过Electron打开包含`<video>`标签的窗口,自动播放指定的本地视频文件
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

十月ooOO

许个愿,我帮你实现

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值