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.pswp.cn/web/46272.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/46272.shtml
英文地址,請注明出處:http://en.pswp.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;他們…