electron 下载文件功能
来源:互联网 发布:辅导软件 编辑:程序博客网 时间:2024/05/22 07:56
初识electron
electron文档:https://github.com/electron/electron
文档里面有中文的,所以还是蛮容易理解的。
文档主要就是介绍electron项目的结构如下:
其中package.json
是用来描述一些配置信息以及一些快速启动的指令等信息的 main.js
则是用来整个项目的主线程,用于创建窗口和处理系统事件。 index.html
就是布局啦。
运行
package.json
文件里有这样一句描述:
这就是快速启动指令,只需要npm start
就可以启动你的electron应用了。
创建渲染器进程
对于渲染器进程,大家给的理解是主线程是无法显示的,需要通过BrowserWindow
来创建新的窗口,每一个窗口维护一个渲染器进程。
我的文件目录如下:
app目录下的js/index.js
就可以看作一个渲染器进程。
主进程和渲染器进程的区别
界面
界面可以通过html+css实现
我的界面如下:
选择文件存放文件夹
此处需要用到electron的一个模块dialog
,但是由于其为主线程内可用的模块,所以在渲染器进程使用的时候必须加上.remote
。
remote 模块提供了一种在渲染进程(网页)和主进程之间进行进程间通讯(IPC)的简便途径。
所以在渲染器进程处加上以下语句获取dialog模块
- 1
选择文件夹具体语句如下
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
实现下载文件
这就是我最爆炸的部分。完成这个应用的一半时间都贡献给了这部分。
先进行简单的校验
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
下载文件我使用的是will-download
,寻找一个合适的模块实现真的很心累,这里就不赘述了。
由于will-download
是主进程的模块调用的,所以此处就需要主进程和渲染进程的通信。
ipcMain和ipcRenderer
通信原理如下:
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
所以我的想法是,在主进程里监听一个download
事件,在渲染进程里当点击下载时调用这个事件。
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
下面这句会触发will-download
事件
- 1
下面来设置监听will-download
事件的回调函数
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
ipc到ipcMain和ipcRender
其实我一开始使用的是ipc进行两个进程之间的通信,但是不论我怎么定义,ipc总是报错,报其没有send和on方法。
又疯狂找资料,遇到这个问题的人还真不多,所以没有找到解决方法。
但是后来发现,与主进程的通信可以使用ipcMain,所以就弃用ipc了。
找不到为什么错真的很伤自尊啊,希望下次可以发现。
主进程更改后刷新页面没有改变
这个的解决方法是退出应用然后重新npm start一次。
这个很好理解吧,重新刷新页面只是更新了渲染器进程而非主进程。
item.setSavePath()问题
这个方法接受一个参数即文件存放路径。
但是!一定保证路径里包含了文件名!一定!
否则,就算路径不正确它也不会报错而是选择存放在默认路径下。
ipcMain和ipcRender的传参问题
- 1
此处的arg
是一个参数而不是参数数组。
所以由于要传下载地址和文件存放地址,我选择使用“+”把它们连接起来。
总结:
除了找出错在哪里其他地方还是蛮有趣的吧。
感觉electron的机制和redux还是蛮像的,其中有主进程负责处理系统调用,而渲染进程负责触发事件。
点击打开链接
- electron 下载文件功能
- Electron加密打包文件
- 实现文件下载功能
- 文件下载功能
- 文件下载功能
- 实现文件下载功能
- php文件下载功能
- 文件下载功能
- 文件下载功能
- 文件下载功能
- 文件下载小功能
- PHP文件下载功能
- js下载文件功能
- Swing文件下载功能
- 文件下载功能
- PHP 文件下载功能
- 文件下载功能
- electron打包asar文件说明
- 14章图像处理
- TCP三次握手和四次挥手过程
- Struts2 ognl判断集合对象是否为空的方法
- 微信“15。。。。。”背后的故事
- 【设计模式】工厂模式——创建对象的最佳方式
- electron 下载文件功能
- hdu 1014 最大公约数
- 爬虫学习笔记--爬取百度贴吧
- 剑指offer第17题(树的子结构)
- 第八章 Android开发规范整理以及Strings.xml定义规范化
- java-web项目的分页与联合模糊查询(不使用分页框架)
- 知识点摘要
- 内轮差编辑内轮差
- PHP中图片上传