Electron下载插件 or 固件至本地

最近有个特殊需求,由于路由器PCB板子是办公类型,无线传输类型,在特定情况下没有网络支持。则桌面应用程序里面的远程升级路由器功能无法使用,则就需要将OTA升级降至本地通过局域网的HTTP请求去实现。

1.下载代码

javascript 复制代码
        Downloads(url){
                var that = this;
                var http = require('http');
                var fs = window.require('fs');
                http.get(url, (res) => { 
					var localFirmwareUrl = process.env.NODE_ENV == "development"? __dirname.split("node_modules")[0]+"build/NewFirmware":__dirname.split("Tools")[0]+"Services/Services";
					if (res.statusCode !== "200") {
						const file = fs.createWriteStream(localFirmwareUrl)
						// 进度
						const len = parseInt(res.headers['content-length']);// 文件总长度
						let cur = 0;
						res.on('data', function (chunk) {
							cur += chunk.length;
							const progress = (100.0 * cur / len).toFixed(2);// 当前进度
							const currProgress = (cur / 1048576).toFixed(2);// 当前了多少
							// console.log(progress);
							// console.log(currProgress + "M");
							that.Download.len = progress/5;
							document.getElementById("restart_step").style.cssText += "width: " + progress/5 + "%;";
						})
						//下载结束
						res.on('end', () => {
							
						})
						//文件写入结束
						file.on('finish', () => {
							file.close();
                            that.File_Upload();
						}).on('error', (err) => {
							fs.unlink(localFirmwareUrl,(e)=>{console.log(e)});
							if (err) {
								console.log(err);
							}
						})
						res.pipe(file);
					} else {
						console.log("网络环境错误!");
						ipcRenderer.sendSync('message', JSON.stringify({
							command: "notification",
							title: that.$t("notification.title_2"),
							body: that.$t("notification.body_27")
						}));
					}
			    })
            },

2.将文件封装成formData

javascript 复制代码
BufConvertFile(url, filename) {
	var fs = window.require('fs');
	console.log(url)
	return new Promise((resolv, reject) => {
		fs.readFile(url, (err, data) => {
			if (err) {
				return
			}
			const blob = new Blob([data], { type: 'text/plain' });
			const file = new File([blob], filename, { type: 'text/plain' });
			resolv(file);
		})
	})
}


File_Upload(){
    var { BufConvertFile } = require('../../utils/util');
	var url = process.env.NODE_ENV == "development"? __dirname.split("node_modules")[0]+"build/NewFirmware":__dirname.split("Tools")[0]+"Services/NewFirmware";
    BufConvertFile(url, "NewFirmware").then(res=>{
    var formData = new FormData();
    formData.append('file', res);
    this.$axios_post(this.$store.state.content.device_service_ip + this.$axios_url_upload + "?req=" + this.$encrypt("sid=" + this.$store.state.content.session_id), formData).then(res=>{
        if(res.status==200){
			this.Resume();
        }else{
			ipcRenderer.sendSync('message', JSON.stringify({
				command: "notification",
				title: that.$t("notification.title_2"),
				body: that.$t("notification.body_26")
				}));
			}
      })
   })
 },

3.下载进度条

javascript 复制代码
//HTML
<div id="restart_step" style="position: relative; top: -10px; width: 0%; height: 10px; background: #226FE3; border-radius: 6px;"></div>

Resume(){
    this.Download.len == 20;
    var stop = setInterval(() => {
       if (this.Download.len >= 100) {
            clearInterval(stop);
            this.$emit("closed_ota", false);
            this.reconnect(this.action_info.ssid,this.action_info.title);
        } else {
            this.Download.len += 2;
             document.getElementById("restart_step").style.cssText += "width: " + this.Download.len + "%;";
        }
   }, 1000);
},
相关推荐
梦鱼28 分钟前
我踩了 72 小时的 Electron webview PDF 灰色坑,只为告诉你:别写这行代码!
前端·javascript·electron
hljqfl1 小时前
traffic-filter,traffic-secure和traffic-policy的区别
网络·智能路由器
song5011 小时前
鸿蒙 Flutter 语音交互进阶:TTS/STT 全离线部署与多语言适配
分布式·flutter·百度·华为·重构·electron·交互
500843 小时前
鸿蒙 Flutter 分布式数据同步:DistributedData 实时协同实战
分布式·flutter·华为·electron·开源·wpf·音视频
北极象3 小时前
Electron 通用技术架构分析
javascript·架构·electron
吃好喝好玩好睡好3 小时前
基于 Electron+Flutter 的跨平台桌面端实时屏幕标注与录屏工具深度实践
javascript·flutter·electron
L、2183 小时前
状态共享新范式:在 Flutter + OpenHarmony 应用中实现跨框架状态同步(Riverpod + ArkState)
javascript·华为·智能手机·electron·harmonyos
北极象3 小时前
CEF 与 Electron简单对比
前端·javascript·electron
离别又见离别3 小时前
electron-vite桌面端better-sqlite3跨平台兼容问题
javascript·electron·sqlite
L、2183 小时前
构建企业级混合架构:Flutter + OpenHarmony 统一开发框架设计与实践
javascript·华为·智能手机·electron·harmonyos