Electron中XML文件上传需主进程调用dialog选文件并用fs读写,大文件用createReadStream流式处理,保存时校验路径防遍历,推荐fs.promises配合async/await,且须遵守沙盒限制仅主进程操作fs。
如果您在开发Electron应用时需要实现XML文件上传功能,并借助Node.js的fs模块进行本地文件读写操作,则需结合渲染进程与主进程通信机制,同时正确调用fs模块的同步或异步API。以下是具体实现方式:
一、通过dialog选择并读取XML文件
Electron中无法直接在渲染进程使用fs模块读取用户选择的文件路径(出于安全限制),必须通过主进程调用dialog.showOpenDialog获取文件路径,再由主进程读取内容并返回给渲染进程。
1、在主进程中注册IPC监听器,接收渲染进程发起的文件选择请求。
2、调用dialog.showOpenDialog,设置filters为[‘XML Files’, ‘*.xml’],限制仅显示.xml扩展名文件。
3、若用户成功选择文件,使用fs.readFileSync(path, ‘utf8’)同步读取XML内容,确保编码为UTF-8以避免中文乱码。
4、将读取到的XML字符串通过ipcRenderer.sendToHost发送回渲染进程。
二、使用fs.createReadStream流式读取大XML文件
当XML文件体积较大(如超过50MB)时,不宜使用readFileSync一次性加载全部内容至内存,应采用流式读取方式,降低内存占用并提升响应效率。
1、在主进程中接收渲染进程传入的XML文件绝对路径。
2、调用fs.createReadStream(filePath, { encoding: ‘utf8’ })创建可读流。
3、监听data事件,分块接收XML文本片段,拼接或转发至渲染进程。
4、监听end事件确认流读取完成,并发送完成信号。
三、将XML内容写入本地文件系统
若需将用户编辑后的XML内容保存至本地磁盘,可利用fs.writeFileSync或fs.writeFile,前者为同步阻塞调用,后者为异步非阻塞调用,适用于不同场景需求。
1、在主进程中监听渲染进程发来的XML数据及目标保存路径。
2、校验目标路径是否合法,禁止接受包含../的路径字符串,防止目录遍历攻击。