fastadmin批量壓縮下載遠程視頻文件

后端代碼

    // 批量下載并壓縮
public function downloadAll(){$ids = input('ids');$row = $this->model->where('id', 'in', $ids)->field('id,title,video_url')->select();if (!$row) {$this->error('記錄不存在');}$arr = [];$tempFiles = []; // 用來存儲臨時下載的視頻文件路徑// 打包視頻文件的 ZIP 文件名$zipname = '視頻文件[' . str_replace(',', '_', $ids) . ']' . date('YmdHis') . '.zip';// 初始化 ZIP 壓縮包$zip = new \ZipArchive();if ($zip->open($zipname, \ZIPARCHIVE::CREATE) !== TRUE) {$this->error('無法創建壓縮包');}foreach ($row as $item) {// 假設視頻鏈接存儲在數據庫中的 'video_url' 字段$videoUrl = $item['video_url']; // 遠程視頻的 URL$fileName = basename($videoUrl); // 獲取文件名// 直接通過 HTTP 流式讀取遠程文件并將其寫入到 ZIP 中if ($this->addRemoteFileToZip($zip, $videoUrl, $fileName)) {$arr[] = $fileName; // 添加到數組}}if (empty($arr)) {$this->error('沒有可下載的視頻文件');}// 關閉 ZIP 文件$zip->close();// 發送到瀏覽器\fast\Http::sendToBrowser($zipname);
}/*** 將遠程文件流式讀取并添加到 ZIP 壓縮包* @param ZipArchive $zip ZipArchive 對象* @param string $url 遠程文件 URL* @param string $fileName 壓縮包中的文件名* @return bool 是否成功*/
private function addRemoteFileToZip($zip, $url, $fileName) {// 打開遠程文件的 URL 進行流式讀取$ch = curl_init();curl_setopt($ch, CURLOPT_URL, $url);curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);  // 允許 URL 重定向curl_setopt($ch, CURLOPT_TIMEOUT, 30);  // 設置超時時間$fileContent = curl_exec($ch);if (curl_errno($ch)) {curl_close($ch);return false; // 下載失敗}// 獲取文件內容并關閉 cURLcurl_close($ch);// 將內容添加到 ZIP 文件if ($fileContent !== false) {$zip->addFromString($fileName, $fileContent); // 使用文件名和內容添加到 ZIP 中return true;}return false;
}

前端js代碼

                    //批量下載$(document).on("click", ".btn-download", function () {var selectedrow = table.bootstrapTable('getSelections');if(selectedrow.length<1){Toastr.error('未選擇任何記錄,不能下載!');return;}var ids = [];for(var i=0;i<selectedrow.length;i++){ids[i] = selectedrow[i].id;//  遍歷選擇記錄}location.href='/admin/downloadAll?ids='+ids.join(',')});

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/62935.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/62935.shtml
英文地址,請注明出處:http://en.pswp.cn/web/62935.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

邊緣計算+人工智能:讓設備更聰明的秘密

引言&#xff1a;日常生活中的“智能”設備 你是否發現&#xff0c;身邊的設備正變得越來越“聰明”&#xff1f; 早上醒來時&#xff0c;智能音箱已經根據你的日程播放舒緩音樂&#xff1b;走進廚房&#xff0c;智能冰箱提醒你今天的食材庫存&#xff1b;而在城市道路上&…

JVM 雙親委派模型以及垃圾回收機制

目錄 1. JVM 內存區域劃分 2. JVM 中類加載的過程 1) 類加載的基本流程 2) 雙親委派模型 3. JVM 中垃圾回收機制 1) 找到垃圾 a) 引用計數 b) 可達性分析 2) 釋放垃圾 1. JVM 內存區域劃分 一個運行起來的 Java 進程&#xff0c;其實就是一個 JVM 虛擬機。 而進程是…

ansible自動化運維(四)jinjia2模板

Jinjia2模板 前面說到playbook組成的時候&#xff0c;有介紹到template模塊&#xff0c;而template模塊對模板文件進行渲染時&#xff0c;使用的就是jinja2模板引擎&#xff0c;jinja2本身就是基于python的模板引擎&#xff0c;所以下面先來了解一下jinjia2模板的一些用法 基…

通過k-means對相似度較高的語句進行分類

本文介紹了如何使用K-Means算法對相似度較高的語句進行分類&#xff0c;并附上java案例代碼 import java.util.ArrayList; import java.util.List; import java.util.Random;public class KMeansTextClustering {public static void main(String[] args) {// 初始化語句數據集…

Oracle 19c rac 補丁升級,從19.7 to19.22-集群

1. 補丁包概述 數據庫環境 角色 數據庫 IP地址 數據庫版本 主機名 數據庫名稱 源端 RAC 172.30.21.166/167 19.7 hfcwdb66/hfcwdb67 hfdb 將以下補丁包上傳到/soft下 上傳到兩個節點的soft目錄下&#xff1a;p6880880_190000_Linux-x86-64.zip &#xff08;更新o…

Windows安裝Jira

下載 Download Jira Data Center | Atlassian https://product-downloads.atlassian.com/software/jira/downloads/atlassian-jira-software-10.3.0-x64.exe 以管理員身份安裝&#xff0c;否則彈出以下提醒 創建和配置MySQL數據庫&#xff1a;參照 Connecting Jira applicat…

uniapp - 微信小程序

一、background-image 大圖不顯示的問題 解決方法&#xff1a; 1、使用網絡地址&#xff1b;2、使用 base64 urlTobase64(filePath) {// #ifdef MP-WEIXINlet img ${filePath},imgBase64 wx.getFileSystemManager().readFileSync(img, "base64"),base64Url data:…

DETR: End-to-End Object Detection with Transformers論文學習

論文地址&#xff1a;https://arxiv.org/pdf/2005.12872 代碼地址&#xff1a;https://github.com/facebookresearch/detr 相關學習視頻&#xff1a;https://space.bilibili.com/94779326/lists?sid1531941 標題前言&#xff1a; DETR 是 Facebook 團隊于 2020 年提出的基于…

LeetCode 24反轉鏈表

單鏈表反轉&#xff1a;詳細解析與代碼實現 在數據結構的學習過程中&#xff0c;鏈表是一個非常重要且有趣的部分&#xff0c;而單鏈表的反轉操作更是常考的基礎知識點。今天就來和大家詳細講講如何實現單鏈表的反轉&#xff0c;并通過代碼示例來加深理解呀。 題目 給定單鏈…

Redis學習筆記之——學習計劃

Redis——Remote Dictionary Server&#xff0c;開源、基于內存、速度快、key-value... Redis做為一個高性能的鍵值存儲系統&#xff0c;廣泛應用于緩存、會話存儲、分布式鎖以及其他需要快速訪問的數據場景中。熟悉掌握redis&#xff0c;似乎已成為廣大碼農們必備的一項技能。…

網絡安全教學博客(二):常見網絡安全威脅剖析

在上一篇博客中&#xff0c;我們了解了網絡安全的基礎概念和重要性。今天&#xff0c;讓我們深入探討一下常見的網絡安全威脅&#xff0c;以便我們能夠更好地識別和防范它們。 惡意軟件&#xff08;Malware&#xff09; 病毒&#xff08;Virus&#xff09;&#xff1a;病毒是一…

Vue3狀態管理:Pinia架構設計分析

Vue3狀態管理:Pinia架構設計分析 介紹 在Vue.js開發中&#xff0c;狀態管理是一個非常重要的部分。隨著Vue3的發布&#xff0c;Pinia作為一種新的狀態管理架構也相繼問世。本文將對Pinia架構進行深入分析&#xff0c;幫助讀者了解其設計原理、特點以及在實際項目中的應用。 架構…

【IDEA】啟動報錯

今天啟動IDEA報錯 報錯信息&#xff1a; Cannot connect to already running IDE instance. Exception: Process 5,444 is still running 打開任務管理器&#xff0c;關掉進程ID5444的任務

socket編程UDP-實現停等機制(接收確認、超時重傳)

在下面博客中&#xff0c;我介紹了利用UDP模擬TCP連接、按數據包發送文件的過程&#xff0c;并附上完整源碼。 socket編程UDP-文件傳輸&模擬TCP建立連接脫離連接&#xff08;進階篇&#xff09;_udp socket發送-CSDN博客 下面博客實現的是滑動窗口機制&#xff1a; sock…

uniapp小程序的錨點定位(將頁面滾動到目標位置)

小程序中&#xff0c;a頁面跳轉到b頁面&#xff0c;跳轉后滾動定位到b頁面的特定位置。 1.uni.pageScrollTo傳遞一個scrollTop參數可以滾動到特定位置。2.可以通過 uni.createSelectorQuery()等獲取定位元素的位置信息。3.uni.getSystemInfoSync()獲取設備的導航欄和狀態欄高度…

php基礎:命名空間

1.PHP 命名空間可以解決以下兩類問題&#xff1a; 1.用戶編寫的代碼與PHP內部的類/函數/常量或第三方類/函數/常量之間的名字沖突。 2.為很長的標識符名稱(通常是為了緩解第一類問題而定義的)創建一個別名&#xff08;或簡短&#xff09;的名稱&#xff0c;以提高源代碼的可讀…

分布式 CAP理論 總結

前言 相關系列 《分布式 & 目錄》《分布式 & CAP理論 & 總結》《分布式 & CAP理論 & 問題》 分布式 分布式的核心是將大型業務拆解成多個子業務以使之在不同的機器上執行。分布式是用于解決單個物理機容量&性能瓶頸問題而采用的優化手段&#xf…

python xpath解析筆記

與bs4的區別 bs4有很多屬性和方法&#xff0c;而xpath只有一個方法&#xff0c;是通過不同的xpath表達式實現很多功能的。 html例子 定位 tree.xpath(‘/html/head/title’) 返回列表。 開頭的斜杠表示從根節點遍歷。 中間的斜杠表示層級。&#xff08;相當于bs4中的>…

Q學習(Q-Learning)詳解

?作者簡介&#xff1a;2022年博客新星 第八。熱愛國學的Java后端開發者&#xff0c;修心和技術同步精進。 &#x1f34e;個人主頁&#xff1a;Java Fans的博客 &#x1f34a;個人信條&#xff1a;不遷怒&#xff0c;不貳過。小知識&#xff0c;大智慧。 &#x1f49e;當前專欄…

樹狀數組詳解

概述 樹狀數組&#xff08;Binary Indexed Tree&#xff0c;簡稱BIT&#xff09;&#xff0c;是一種數據結構&#xff0c;用于處理區間查詢和更新問題。它是一種可以高效地在對數級別時間復雜度內進行單點更新和區間查詢的數據結構。樹狀數組通常用于解決以下兩類問題&#xf…