electron项目中实现视频下载保存到本地

  • 第一种方式:用户自定义选择下载地址位置

渲染进程

// 渲染进程// 引入
import { ipcRenderer } from "electron";// 列表行数据下载视频操作,diffVideoUrl 是视频请求地址
handleDownloadClick(row) {if (!row.diffVideoUrl) {this.$message.error("暂无视频,请稍后重试下载");} else {//渲染线程主动发送 downloadVideo事件到主线程请求下载视频ipcRenderer.send("downloadVideo", row.diffVideoUrl, row.orderCode);}
}

主进程

// 主进程// 引入
import { ipcMain, dialog } from "electron";
import path from "path";
import fs from "fs";
import axios from "axios";// 监听渲染进程下载视频
ipcMain.on("downloadVideo", async (event, videoUrl, fileName) => {let result = await dialog.showOpenDialog({properties: ["openDirectory", "createDirectory", "promptToCreate"],});if (!result.canceled) {// 用户选择的路径let directoryPath = result.filePaths[0];// 获取目标文件的路径const destPath = path.join(directoryPath, fileName + ".mp4");try {// 请求七牛视频地址接口,获取视频const response = await axios({method: "get",url: videoUrl,responseType: "stream", // 以流的形式获取响应体,用于写入文件});// 在用户选择的目标文件路径下创建一个可写流const ws = fs.createWriteStream(destPath);// 将数据流保存到文件中response.data.pipe(ws);dialog.showMessageBox(mainWindow, {message: "已下载成功!",type: "none",});} catch (error) {console.log(error);dialog.showMessageBox(mainWindow, {message: "下载失败!",type: "none",});}}
});
  • 第二种方式:系统内部设置默认下载地址位置

渲染进程

// 渲染进程// 引入
import { ipcRenderer } from "electron";// 列表行数据下载视频操作,diffVideoUrl 是视频请求地址
handleDownloadClick(row) {if (!row.diffVideoUrl) {this.$message.error("暂无视频,请稍后重试下载");} else {//渲染线程主动发送 downloadVideo事件到主线程请求下载视频ipcRenderer.send("downloadVideo", row.diffVideoUrl, row.orderCode);}
}

主进程

// 主进程// 引入
import { app, ipcMain, dialog } from "electron";
import path from "path";
import fs from "fs";
import axios from "axios";// 监听渲染进程下载视频
ipcMain.on("downloadVideo", async (event, videoUrl, fileName) => {// 默认下载到电脑 downloads 目录下let directoryPath = app.getPath("downloads");// 获取目标文件的路径const destPath = path.join(directoryPath, fileName + ".mp4");try {// 请求七牛视频地址接口,获取视频const response = await axios({method: "get",url: videoUrl,responseType: "stream", // 以流的形式获取响应体,用于写入文件});// 在用户选择的目标文件路径下创建一个可写流const ws = fs.createWriteStream(destPath);// 将数据流保存到文件中response.data.pipe(ws);dialog.showMessageBox(mainWindow, {message: "已下载成功!",type: "none",});} catch (error) {console.log(error);dialog.showMessageBox(mainWindow, {message: "下载失败!",type: "none",});}
});

代码中相关代码点解释:

mainWindownew BrowserWindow() 创建应用程序窗口,此处省略相关代码,例子代码如下:

// 在主进程中.
const { BrowserWindow } = require('electron')const mainWindow = new BrowserWindow({ width: 800, height: 600 })

dialog.showOpenDialog 参考官方文档:dialog.showOpenDialog

dialog.showOpenDialog
app.getPath 参考官方文档:app.getPath

app.getPath
如有其它问题,请在评论区留言,博主看到都会回复的~

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

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

相关文章

【数字电路学习新助手】掌握电路仿真软件,开启数字电路知识的新篇章

在信息科技日新月异的今天,数字电路知识的重要性不言而喻。无论是通信工程、计算机科学与技术,还是电子信息技术等领域,数字电路都是基础中的基础。然而,对于初学者来说,数字电路的学习往往充满了挑战。幸运的是&#…

Axure中继器入门:打造你的动态原型

前言 中继器 是 Axure 中的一个高级功能,它能够在静态页面上模拟后台数据交互的操作,如增加、删除、修改和查询数据,尽管它不具备真实数据存储能力。 中继器就像是一个临时的数据库,为我们在设计原型时提供动态数据管理的体验&a…

中职省培丨2024年大数据技术中职教师专业技能培训班企业参观实践圆满结束

7月17日,“2024年大数据技术中职教师专业技能培训班(省培)”参训老师莅临广东泰迪智能科技股份有限公司产教融合实训中心开展企业参观实践。泰迪智能科技董事长张良均、中职业务部总监李振林、中职业务部经理黄炳德、校企合作经理吴桂锋及来自…

centos跳过首次创建用户

centos跳过首次创建用户 centos跳过首次创建用户 在安装系统后,登录的时候总是让新建一个普通用户,很是烦人,于是想办法解决一下 方法一 在CentOS上,图形化登录(如GNOME)通常要求您创建一个用户来登录。…

.net core appsettings.json 配置 http 无法访问

1、在appsettings.json中配置"urls": "http://0.0.0.0:8188" 2、但是网页无法打开 3、解决办法,在Program.cs增加下列语句 app.UseAntiforgery();

vue 如何做一个动态的 BreadCrumb 组件,el-breadcrumb ElementUI

vue 如何做一个动态的 BreadCrumb 组件 el-breadcrumb ElementUI 一、ElementUI 中的 BreadCrumb 定义 elementUI 中的 Breadcrumb 组件是这样定义的 <template><el-breadcrumb separator"/"><el-breadcrumb-item :to"{ path: / }">主…

爬虫的概念

爬虫&#xff08;Web Crawler 或 Web Spider&#xff09;是一种自动化脚本或程序&#xff0c;用于浏览万维网&#xff08;World Wide Web&#xff09;并抓取网页上的信息。它们按照设定的规则自动地访问互联网上的网页&#xff0c;提取所需的数据&#xff0c;如文本、图片、视频…

搭建七日杀服务端系统选择,系统如何选择

《七日杀》是一款集合了第一人称射击、恐怖生存、塔防与角色扮演要素于一身的开放世界僵尸游戏。玩家需要在美国亚历桑纳地区作为幸存者生存&#xff0c;并探究整个事件背后的真相。对于喜欢这款游戏的玩家来说&#xff0c;搭建自己的专属服务器不仅能降低延迟&#xff0c;还能…

精通Python数据可视化:Matplotlib柱状图、直方图与饼状图实战解析

精通Python数据可视化&#xff1a;Matplotlib柱状图、直方图与饼状图实战解析 引言 在数据分析和科学研究中&#xff0c;数据可视化扮演着至关重要的角色。Matplotlib是Python中一个广泛使用的绘图库&#xff0c;它提供了丰富的绘图功能和灵活的定制选项。本文将详细介绍如何…

ubuntu 可以直接在图像界面打开命令行吗

是的&#xff0c;Ubuntu&#xff08;以及其他许多Linux发行版&#xff09;允许用户直接在图形界面&#xff08;GUI&#xff09;中打开命令行界面。这通常通过打开一个终端模拟器应用程序来实现&#xff0c;该应用程序提供了一个命令行窗口&#xff0c;用户可以在其中输入和执行…

修改文件的默认打开方式

修改文件的默认打开方式 选中文件&#xff0c;右击&#xff0c;选择属性&#xff0c;如图然后点击更改&#xff0c;选择想要的打开方式&#xff0c;再依次点击 应用、保存 即可&#xff0c;如图

Linux 环境下整体备份迁移 Docker 镜像及数据教程

1. 介绍 本教程将引导您如何在 Linux 环境下备份和迁移 Docker 镜像及其数据。我们将逐步介绍相关步骤&#xff0c;包括 Docker 镜像的导出和导入、数据卷的备份和恢复等。通过本教程&#xff0c;您将能够轻松掌握 Docker 容器的迁移操作。 2. 前置准备 在开始之前&#xff…

Redis中数据分片与分片策略

概述 数据分片是一种将数据分割并存储在多个节点上的技术&#xff0c;可以有效提高系统的扩展性和性能。在Redis中&#xff0c;数据分片主要用于解决单个实例存储容量和性能瓶颈的问题。通过将数据分散存储到多个Redis节点中&#xff0c;可以将负载均衡到不同的服务器上&#…

Visual Studio使用——在vs中给vb.net项目添加新的窗口:新建的方式、添加已有窗口的方式

目录 引出Visual Studio使用vb添加新的窗体自定义代码片段vs显示所有文件 总结Idea安装和使用0.Java下载 和 IDEA工具1.首次新建项目2.隐藏文件不必要显示文件3.目录层级设置4.Settings设置选择idea的场景提示代码不区分大小写 取消git的代码作者显示 引出 Visual Studio使用—…

基于Vue CLI 3构建Vue3项目(Vue2也可参考)

天行健&#xff0c;君子以自强不息&#xff1b;地势坤&#xff0c;君子以厚德载物。 每个人都有惰性&#xff0c;但不断学习是好好生活的根本&#xff0c;共勉&#xff01; 文章均为学习整理笔记&#xff0c;分享记录为主&#xff0c;如有错误请指正&#xff0c;共同学习进步。…

Android Framework学习笔记(4)----Zygote进程

Zygote的启动流程 Init进程启动后&#xff0c;会加载并执行init.rc文件。该.rc文件中&#xff0c;就包含启动Zygote进程的Action。详见“RC文件解析”章节。 根据Zygote对应的RC文件&#xff0c;可知Zygote进程是由/system/bin/app_process程序来创建的。 app_process大致处…

PHP手边酒店多商户版平台小程序系统源码

&#x1f3e8;【旅行新宠】手边酒店多商户版小程序&#xff0c;一键解锁住宿新体验&#xff01;&#x1f6cc; &#x1f308;【开篇&#xff1a;旅行新伴侣&#xff0c;尽在掌握】&#x1f308; 还在为旅行中的住宿选择而纠结吗&#xff1f;是时候告别繁琐的搜索和比价过程&a…

MT6985(天玑9200)芯片性能参数_MTK联发科旗舰5G移动平台处理器

MT6985天玑 9200 旗舰移动平台拥有专业级影像、沉浸式游戏和先进移动显示技术&#xff0c;以及更快捷、覆盖更广的 5G 和 支持 Wi-Fi 7 连接&#xff0c;具有高性能、高能效、低功耗表现。率先采用 Armv9 性能核&#xff0c;全部支持纯 64 位应用&#xff0c;开启高能效架构设计…

【数据库学习】java数据库开发:sql解析之jsqlparser

1&#xff0c;概念 1&#xff09; SQL 解析器 用于处理 SQL 查询语句的解析和分析。 场景&#xff1a; 数据库客户端开发&#xff0c;解析用户输入的sql语法并执行。自定义sql解析和执行逻辑。 标准的数据库接口&#xff08;如 JDBC&#xff09;无法完全满足需求时&#xff…

音频数据集

1 多语言 Mozilla Common Voice 下载地址&#xff1a;https://voice.mozilla.org/data 时长&#xff1a;1965小时&#xff08;目前为止&#xff09; 最早2017年发布&#xff0c;持续更新&#xff0c;该基金会表示&#xff0c;通过 Common Voice 网站和移动应用&#xff0c;他们…