SpringBoot文件下載(多文件以zip形式,單文件格式不變)

SpringBoot文件下載(多文件以zip形式,單文件格式不變)

  • 初始化文件服務器(我的是minio)
  • 文件下載
  • # 樣例
  • # # 單文件
  • # # 多文件

初始化文件服務器(我的是minio)

    private static MinioClient minioClient = null;private static String BUCKETNAME;public void init() {String endpoint = "endpoint";int port = 9000;String accessKey = "accessKey";String secretKey = "secretKey";boolean secure = false;try {minioClient = new MinioClient(endpoint, port, accessKey, secretKey, secure);if (!minioClient.bucketExists(BUCKETNAME)) {minioClient.makeBucket(BUCKETNAME);String config = "{\"Statement\":[{\"Action\":[\"s3:GetBucketLocation\",\"s3:ListBucket\"],\"Effect\":\"Allow\",\"Principal\":\"*\",\"Resource\":\"arn:aws:s3:::" + BUCKETNAME + "\"},{\"Action\":\"s3:GetObject\",\"Effect\":\"Allow\",\"Principal\":\"*\",\"Resource\":\"arn:aws:s3:::" + BUCKETNAME + "/*\"}],\"Version\":\"2012-10-17\"}";minioClient.setBucketPolicy(BUCKETNAME, config);}} catch (Exception var7) {throw new RuntimeException(var7);}}

文件下載

	// fileName : /0/0/2025-9/合格率明細(2025-09).xlsxpublic void downInfo(HttpServletResponse response, String ... fileName) {if(fileName.length == 1){// 單文件下載downLoadOne(response,fileName[0]);}else{//多文件下載downZip(response,fileName);}}void downLoadOne(HttpServletResponse response,  String filePath){try {InputStream fileStream = minioClient.getObject(BUCKETNAME, filePath);String baseName = FilenameUtils.getBaseName(filePath);response.setHeader("Access-Control-Expose-Headers", "Content-Disposition");response.setHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode(baseName, "UTF-8"));//文件流輸出OutputStream out = new BufferedOutputStream(response.getOutputStream());byte[] buffer = new byte[1024];int bytesRead;while ((bytesRead = fileStream.read(buffer)) != -1) {out.write(buffer, 0, bytesRead);}out.flush();out.close();fileStream.close();} catch (Exception err) {throw new RuntimeException("文件下載失敗", err);}}public void downZip(HttpServletResponse response,String ... fileName) {FileServer fileServer = FileServerFactory.get(null);// 設置響應頭response.setContentType("application/zip");response.setHeader(HttpHeaders.CONTENT_DISPOSITION, "attachment; filename=\"download.zip\"");// 創建流式響應try (ZipOutputStream zipOutputStream = new ZipOutputStream(response.getOutputStream())) {for (String filePath : fileName) {// 獲取文件流InputStream fileStream = minioClient.getObject(BUCKETNAME, filePath);// 創建ZIP條目String baseName = FilenameUtils.getBaseName(filePath);ZipEntry zipEntry = new ZipEntry(baseName);zipOutputStream.putNextEntry(zipEntry);// 寫入數據byte[] buffer = new byte[1024];int bytesRead;while ((bytesRead = fileStream.read(buffer)) != -1) {zipOutputStream.write(buffer, 0, bytesRead);}// 關閉條目和流zipOutputStream.closeEntry();fileStream.close();}zipOutputStream.finish();} catch (Exception e) {throw new RuntimeException("文件下載失敗", e);}}

# 樣例

# # 單文件

在這里插入圖片描述

# # 多文件

在這里插入圖片描述
在這里插入圖片描述

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

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

相關文章

【C++題解】貪心和模擬

4小時編碼練習計劃,專注于貪心算法和復雜模擬題,旨在鍛煉您的算法思維、代碼實現能力和耐心。 下午 (4小時): 貪心思維與代碼實現力 今天的重點是兩種在算法競賽和工程中都至關重要的能力:貪心選擇和復雜邏輯的精確實現。貪心算法考察的是能否…

JS多行文本溢出處理

在網頁開發中,多行文本溢出是常見的界面問題。當文本內容超出容器限定的高度和寬度時,若不做處理會破壞頁面布局的整潔性,影響用戶體驗。本文將詳細介紹兩種主流的多行文本溢出解決方案,并從多個維度進行對比,幫助開發…

C++(Qt)軟件調試---bug排查記錄(36)

C(Qt)軟件調試—bug排查記錄(36) 文章目錄C(Qt)軟件調試---bug排查記錄(36)[toc]1 無返回值函數風險2 空指針調用隱患3 Debug/Release差異4 ARM架構char符號問題5 linux下找不到動態庫更多精彩內容👉內容導航 &#x1…

人工智能領域、圖歐科技、IMYAI智能助手2025年8月更新月報

IMYAI 平臺 2025 年 8 月功能更新與模型上新匯總 2025年08月31日 功能更新: 對話與繪畫板塊現已支持多文件批量上傳。用戶可通過點擊或拖拽方式一次性上傳多個圖片或文件,操作更加便捷。2025年08月25日近期更新亮點: 文檔導出功能增強&#x…

2025獨立站技術風向:無頭電商+PWA架構實戰指南

根據 Gitnux 的統計數據,預計到 2025 年,北美將有 60% 的大型零售商采用無頭平臺。而仍在傳統架構上運營的獨立站,平均頁面加載速度落后1.8秒,轉化率低32%。無獨有偶,Magento Association 的一項調查顯示,7…

淘寶京東拼多多爬蟲實戰:反爬對抗、避坑技巧與數據安全要點

一、先搞懂:電商爬蟲的 3 大核心挑戰(比普通爬蟲更復雜的原因) 做電商爬蟲前,必須先明確「為什么難」—— 淘寶、京東、拼多多的反爬體系是「多層級、動態化、行為導向」的,絕非簡單的 UA 驗證或 IP 封禁:…

【1】MOS管的結構及其工作原理

以nmos舉例,mos管由三個電極:G極(gate)、D極(drain)、S極(source)和一個襯底組成,而這三個電極之間通過絕緣層相隔開;①既然GDS三個電極之間兩兩相互絕緣&…

如何保存訓練的最優模型和使用最優模型文件

一 保存最優模型主要就是我們在for循環中加上一個test測試,并且我還在test函數后面加上了返回值,可以返回準確率,然后每次進行一次對比,然后取大的。然后這里有兩種保存方式,一種是保存了整個模型,另一個是…

vue3+ts+echarts多Y軸折線圖

因為放在了子組件才監聽&#xff0c;加載渲染調用&#xff0c;有暗黑模式才調用&#xff0c;<!-- 溫濕度傳感器 --><el-row v-if"deviceTypeId 2"><el-col :xs"24" :sm"24" :md"24" :lg"24" :xl"24&qu…

基于Taro4打造的一款最新版微信小程序、H5的多端開發簡單模板

基于Taro4、Vue3、TypeScript、Webpack5打造的一款最新版微信小程序、H5的多端開發簡單模板 特色 &#x1f6e0;? Taro4, Vue 3, Webpack5, pnpm10 &#x1f4aa; TypeScript 全新類型系統支持 &#x1f34d; 使用 Pinia 的狀態管理 &#x1f3a8; Tailwindcss4 - 目前最流…

ITU-R P.372 無線電噪聲預測庫調用方法

代碼功能概述&#xff08;ITURNoise.c&#xff09;該代碼是一個 ITU-R P.372 無線電噪聲預測 的計算程序&#xff0c;能夠基于 月份、時間、頻率、地理位置、人為噪聲水平 計算特定地點的 大氣噪聲、銀河噪聲、人為噪聲及其總和&#xff0c;并以 CSV 或標準輸出 方式提供結果。…

《從報錯到運行:STM32G4 工程在 Keil 中的頭文件配置與調試實戰》

《從報錯到運行&#xff1a;STM32G4 工程在 Keil 中的頭文件配置與調試實戰》文章提綱一、引言? 闡述 STM32G4 在嵌入式領域的應用價值&#xff0c;說明 Keil 是開發 STM32G4 工程的常用工具? 指出頭文件配置是 STM32G4 工程在 Keil 中開發的關鍵基礎環節&#xff0c;且…

Spring 事務提交成功后執行額外邏輯

1. 場景與要解決的問題在業務代碼里&#xff0c;常見訴求是&#xff1a;只有當數據庫事務真正提交成功后&#xff0c;才去執行某些“后置動作”&#xff0c;例如&#xff1a;發送 MQ、推送消息、寫審計/埋點日志、刷新緩存、通知外部系統等。如果這些動作在事務提交前就執行&am…

Clickhouse MCP@Mac+Cherry Studio部署與調試

一、需求背景 已經部署測試了Mysql、Drois的MCP Server,想進一步測試Clickhouse MCP的表現。 二、環境 1)操作系統 MacOS+Apple芯片 2)Clickhouse v25.7.6.21-stable、Clickhouse MCP 0.1.11 3)工具Cherry Studio 1.5.7、Docker Desktop 4.43.2(199162) 4)Python 3.1…

Java Serializable 接口:明明就一個空的接口嘛

對于 Java 的序列化,我之前一直停留在最淺層次的認知上——把那個要序列化的類實現 Serializbale 接口就可以了嘛。 我似乎不愿意做更深入的研究,因為會用就行了嘛。 但隨著時間的推移,見到 Serializbale 的次數越來越多,我便對它產生了濃厚的興趣。是時候花點時間研究研…

野火STM32Modbus主機讀取寄存器/線圈失敗(三)-嘗試將存貯事件的地方改成數組(非必要解決方案)(附源碼)

背景 盡管crc校驗正確了&#xff0c;也成功發送了EV_MASTER_EXECUTE事件&#xff0c;但是eMBMasterPoll( void )中總是接收的事件是EV_MASTER_FRAME_RECEIVED或者EV_MASTER_FRAME_SENT&#xff0c;一次都沒有執行EV_MASTER_EXECUTE。EV_MASTER_EXECUTE事件被別的事件給覆蓋了&…

微信小程序校園助手程序(源碼+文檔)

源碼題目&#xff1a;微信小程序校園助手程序&#xff08;源碼文檔&#xff09;?? 文末聯系獲取&#xff08;含源碼、技術文檔&#xff09;博主簡介&#xff1a;10年高級軟件工程師、JAVA技術指導員、Python講師、文章撰寫修改專家、Springboot高級&#xff0c;歡迎高校老師、…

59-python中的類和對象、構造方法

1. 認識一下對象 世間萬物皆是"對象" student_1{ "姓名":"小樸", "愛好":"唱、跳、主持" ......... }白紙填寫太落伍了 設計表格填寫先進一些些 終極目標是程序使用對象去組織數據程序中設計表格&#xff0c;我們稱為 設計類…

向成電子驚艷亮相2025物聯網展,攜工控主板等系列產品引領智造新風向

2025年8月27-29日&#xff0c;IOTE 2025 第二十四屆國際物聯網展深圳站在深圳國際會展中心&#xff08;寶安&#xff09;盛大啟幕&#xff01;作為全球規模領先的物聯網盛會之一&#xff0c;本屆展會以“生態智能&#xff0c;物聯全球”為核心&#xff0c;匯聚超1000家全球頭部…

陣列信號處理之均勻面陣波束合成方向圖的繪制與特點解讀

陣列信號處理之均勻面陣波束合成方向圖的繪制與特點解讀 文章目錄前言一、方向圖函數二、方向圖繪制三、副瓣電平四、陣元個數對主瓣寬度的影響五、陣元間距對主瓣寬度的影響六、MATLAB源代碼總結前言 \;\;\;\;\;均勻面陣&#xff08;Uniform Planar Array&#xff0c;UPA&…