vue2使用electron-builder打包-使用electron的api实现文件下载

news2024/9/21 20:38:59

本项目用的是vue2版本开发,最后使用electron-builder打包成桌面应用程序
一、需求描述
1、用户点击按钮,下载html文件
2、代码

exportHtml() {
//.html是放在public文件夹下面的本地文件
      axios.get("/html/合同模板.html").then(res => {
        let a = document.createElement("a");
        let url = window.URL.createObjectURL(
          new Blob([res.data], {
            type: "text/html;charset='utf-8'" //这里指定的type对于桌面应用程序不生效,对浏览器有用
          })
        );
        a.href = url;
        a.download = "合同模板.html";
        a.click();
        window.URL.revokeObjectURL(url);
      });
    },
  • 浏览器下载
    在这里插入图片描述

  • 桌面应用程序下载
    在这里插入图片描述
    二、优化需求:保存类型为.html类型,弹窗的标题改为"另存为"
    在这里插入图片描述
    大概思路介绍: 点击下载按钮时在vue页面使用dialog弹窗,自定义title和文件类型,保存时,在vue页面使用electronipcRenderer与主进程(background.js)通信,将下载文件的数据信息传过去,在主进程中保存文件。

1、 安装electron: npm install -s electron (本项目使用11的版本)"electron": "^11.5.0"

2、在background.js中配置

 async function createWindow() {
  win = new BrowserWindow({
    width: 1200,
    height: 800,
    icon:path.join(__dirname,'favicon.ico'),
    webPreferences: {
      nodeIntegration:true,// process.env.ELECTRON_NODE_INTEGRATION,
      contextIsolation: !process.env.ELECTRON_NODE_INTEGRATION,
      enableRemoteModule:true  //启用Remote模块
    },
   
  })

在这里插入图片描述
3、vue中引入(main.js)

//electron需要打开,如果只是单纯的运行vue项目浏览器会报错
const electron = window.require('electron')
const remote = window.require("electron").remote
Vue.prototype.$electron = electron
Vue.prototype.$remote = remote

4、在需要导出文件的.vue页面使用

exportHtml() {
      axios.get("/html/合同模板.html").then(res => {
         let url = window.URL.createObjectURL(
          new Blob([res.data], {
            type: "text/html"
          })
        );
        //使用remote模块的dialog
       this.$remote.dialog.showSaveDialog(
        {
          title: "另存为",
          filters: [
            { name: ".html", extensions: [".html"] } //另存为的数据类型
          ],
          defaultPath: `${this.fileName}.html`  //这个是文件名称,后面必须要加上.html后缀
        }).then(res=>{
		  	//变量值
           const obj = {
            url: url,
            filePath: res.filePath 
           }
           this.$electron.ipcRenderer.send('sendFile',JSON.stringify(obj))  
         }).catch((err)=>{
          console.log("err",err)
        })
       
      });
    },

5、在background.js页面接收

import {  ...ipcMain } from 'electron'
ipcMain.on('sendFile',(event,arg)=>{
  const data = JSON.parse(arg)
  if(data.filePath){
    win.webContents.downloadURL(data.url); 
  }
  win.webContents.session.once('will-download', (event, item, webContents) => {
    if (!data.filePath) return;
    //设置下载项的保存文件路径
    item.setSavePath(data.filePath);
	});
})

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2075154.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

网络通信和TCP/IP协议详解

目录 网络协议 一、计算机网络是什么? 定义和分类 计算机网络发展简史 二、计算机网络体系结构 OSI 七层模型 TCP/IP 模型 TCP/IP 协议族 IP、TCP 和UDP TCP/IP 网络传输中的数据 地址和端口号 MAC 地址 IP 地址 端口号 综述 三、TCP 特性 TCP 三次握…

2024最新影视视频APP源码/猕猴桃影视系统源码/独立后台(支持安卓端+苹果端)

源码简介: 最新影视视频APP源码,它是猕猴桃影视系统源码,它有个独立的后台,无论你是安卓还是苹果用户,都能轻松使用呢。 绿豆源码、绿豆影视、小乌2.1,还有猕猴桃影视。追影兔新版本的整体结构设计已经全…

Transformer模型-3-基本工作流程

继 《Transformer模型-2-模型架构》该文主讲Transformer的基本工作流程。 第一步: 获取输入句子某单词的向量X。 X:是指某单词的向量,transformer是分别计算word embedding和position embedding并将两者相加得到向量X。 Embedding Embeddings 是一种将现…

Spring-bean的循环依赖

文章目录 什么是Spring的循环依赖?Setter 方法循环依赖三级缓存Spring 是如何利用三级缓存解决 Bean 的循环依赖?有了三级缓存为什么还需要二级缓存? 构造器循环依赖总结 什么是Spring的循环依赖? 在 Spring 框架中,循环依赖是指两个或多个…

萌化人心的AI宠物视频:1条爆款35万赞,带你轻松涨粉10万(附教程)

萌宠系的小动物配上可爱的 BGM,场景情绪感直接拉满。用 AI 做超萌宠物视频,涨粉确实香, 分享一个有趣的 AI 宠物玩法,使用用 AI 生成超萌动物(水獭),做成宠物互动的场景式,这种视频播…

掌握Go语言的基本数据类型:编程世界的ABC

Go语言以其精炼的语法和卓越的性能,正日益成为现代软件开发的关键驱动力。在Go语言的众多特性中,基本数据类型的重要性不言而喻,它们是构建任何复杂应用程序的基石。正如掌握任何新语言需从其基础元素开始,Go语言的学习同样始于对…

【qt】windows下qt连接数据库

1.新建数据库 create database mydatabase;2.新建表结构,并插入数据 3.qt下连接数据库 1.连接数据库,需要加sql 2.添加QsqlDatabase头文件,使用提示句柄,头文件QMessageBox 3.连接数据库 4.界面设计 5.插入实现 注意这里如果…

盛水最多的容器问题

目录 一题目概述: 二思路理解: 三解答代码: 一题目概述: leetcode链接:. - 力扣(LeetCode) 二思路理解: 首先这道题虽然看起来简单,很难不让人想到直接暴力破解它&a…

【操作系统】12.文件系统是怎么管理的?

2.文件系统是怎么管理的? 2.1 文件系统的实现 2.1.1 文件系统层次结构 用户调用接口 文件目录系统 存取控制验证模块 逻辑文件系统与文件信息缓冲区 物理文件系统 辅助分配模块 设备管理程序模块 2.1.2 目录实现 线性列表 哈希表 2.1.3 文件实现 文件分配方式 连续…

Unity射击游戏开发教程:(32)控制子弹射速

显示发射速度从较慢到较快的变化 这是一篇关于如何实现射速以防止玩家乱按射击按钮的快速文章。 通常做法 说到要控制子弹的射速,可以通过以下几种方法: 通过设置子弹的发射间隔时间来控制射速。在每次子弹发射后,设置一个时间延迟,确保下一枚子弹不能立即发射。 利用计时…

Redis下载安装使用教程图文教程(超详细)

《网络安全自学教程》 Redis下载安装使用 1、下载安装2、基础配置2.1、远程连接2、保护模式3、默认密码4、后台运行4.1 验证服务是否启动4.2 停止服务 1、下载安装 1)到Redis中文网 https://www.redis.com.cn/download.html 下载Redis安装包 2)Redis的安…

市场动荡!宝马「赶超」特斯拉?华为打响高阶智驾「价格战」

新能源汽车市场正在进入动荡期。 本周,欧洲市场传来重磅消息,宝马在欧洲的电动汽车销量首次超过特斯拉。根据JATO Dynamics的数据,7月宝马在欧洲本土市场销售了14,869辆电动汽车,以308辆的微弱优势首次超过特斯拉。 数据显示&…

“蓝屏事件”阴魂不散,微软安全更新导致 Linux 系统无法启动即解决方案

最近,众多Linux用户报告称他们的设备在尝试启动时,收到了一条神秘的错误消息:“系统出了严重问题。”这起事件的罪魁祸首是微软在月度安全更新中发布的一个补丁,用于修复一个存在已久的GRUB漏洞。 这次更新却导致了Linux和Windows…

Adobe InDesign(ID)专业的排版设计软件win/mac软件下载安装和快捷键的使用

一、Adobe InDesign软件概述 1.1 软件简介 Adobe InDesign是Adobe Systems公司开发的一款面向印刷和数字媒体出版物的专业排版设计软件。它广泛应用于书籍、杂志、报纸、宣传册、海报、广告、电子书等多种出版物的设计与制作中。InDesign以其强大的排版功能、灵活的页面布局工…

7 款最佳软件,可恢复从回收站中删除的文件

您是否曾经从回收站中删除了文件并想要恢复它们?这似乎是不可能的。 但是,从技术上讲,永久删除的文件不会从您的硬盘驱动器存储中删除,而是更改为无法识别的数据并被您的新文件覆盖。 这使您能够从系统中恢复永久删除的文件。 …

Verdi中快速查找define宏定义及其active/inactive状态

可以通过如下方式查看: 打开verdi后 通过 菜单栏tools -> vc apps toolbox 在VC apps toolbox 中选择Utility-》macro utility : 用macro utility中的三个工具分别打印报告(各自针对不同的宏)。生成的log文件中会显示宏定义的…

VMware上Linux系统报错--mount: 在 /dev/sr0 上找不到媒体【解决办法】

问题背景 在VMware上使用CentOS7系统,想要在CentOS7系统上挂载一个镜像文件,在系统下使用mount命令挂载报错如下所示: 解决办法 用lsblk命令查看sr0设备是存在的 查看虚拟机侧问题,右键虚拟机,点击设置 镜像文件已选…

宝塔面板部署雷池社区版教程

宝塔面板部署雷池社区版教程 简单介绍一下宝塔面板,安全高效的服务器运维面板,使用宝塔面板的人非常多 在网站管理上,许多用户都是通过宝塔面板进行管理,宝塔面板的Nginx默认监听端口为80和443,这就导致共存部署时雷…

AIGC大模型应用教学平台

1、基本介绍 AIGC大模型应用技术实训平台是我公司针对高校开设的《AIGC大模型应用技术》课程配套的实训平台。该平台采用最新的AI推理加速芯片,提供30Tops算力和32GB存储,能够运行常见的大语言模型如ChatGLM2、Llama2、Baicuan、Mistral等,也…

vue2 part3

vscode安装vue3 snippets 天气案例 <!DOCTYPE html> <html><head><meta charset"UTF-8" /><title>姓名案例_插值语法实现</title><!-- 引入Vue --><script type"text/javascript" src"../js/vue.js&q…