下載excel

1.引入依賴

 <dependency><groupId>org.apache.poi</groupId><artifactId>poi</artifactId><version>5.2.5</version></dependency><dependency><groupId>org.apache.poi</groupId><artifactId>poi-ooxml</artifactId><version>5.2.5</version></dependency><!--&lt;!&ndash; Poi-tl Word 模板引擎&ndash;&gt;--><dependency><groupId>com.deepoove</groupId><artifactId>poi-tl</artifactId><version>1.12.2</version></dependency>

2.示例代碼

public download(String id, HttpServletResponse response){File file = null;
try{Item item = itemService.fetchById(id);
InputStream in = new ClassPathResource("/template/item.xlsx").getInputStream();
File temp = File.createTempFile("temp","xlsx");
OutputStream out = new FileOutputStream(temp);
IOUtils.copy(in,out);//apache poi
out.flush();
out.close();
in.close();//基于臨時文件通過輸入流生成xlsx對象并寫入數據
XSSFWorkbook workbook = new XSSFWorkbook(temp);
Sheet sheet = workbook.getSheetAt(0);
Row row = sheet.createRow(2);
row.createCell(0).setCellValue(item.getStudentId());
row.createCell(1).setCellValue(item.getName());
row.createCell(2).setCellValue(item.getSex());//輸出流生成導出的文件
String fileName = String.format("學生信息下載%s.xlsx",DateUtil.format(DateUtil.date(),"yyyyMMddHHmmss"));
//DateUtil 引用的是hutool
file = new File(fileName);
FileOutputStream fileOutputStream = new FileOutputStream(file);
workbook.write(fileOutputStream);
fileOutputStream.flush():
fileOutputStream.close();
//把文件寫到response的輸出流中 最后再刪除兩個中間文件
response.reset();
response.setContentType("application/vnd.ms-excel; charset=utf-8");
// 解決下載的excel報錯問題
response.setHeader("Access-Control-Allow-Origin","*");
response.setHeader("Content-Length", String.valueOf(file.length()));
response.setHeader("Content-Disposition",String.format("attachment; filename=%s",URLEncoder.encode(fileName, StandardCharsets.UTF_8.displayName())));exportFile(response, new FileInputStream(file));}catch(Exception e){throw new RuntimeException(e.getMessage());
}finally {if(null != file) file.delete();}return "ok";}public static void exportFile(HttpServletResponse response, InputStream is){byte[] buff = new byte[1024];BufferedInputStream bis = null;OutputStream os = null;
try{
os = response.getOutputStream();
bis = new BufferedInputStream(is);
int i = bis.read(buff);
while(i!=-1){os.write(buff, 0, buff.length);os.flush();i = bis.read(buff);}}catch (IOException e){e.printStackTrace();
}finally {if(null != bis){try{bis.close();}catch (IOException e){e.printStackTrace();
}}if( os != null){try{os.close();}catch (IOException e ){e.printStackTrace();
}}}}

前端接收時,需要用blob進行接收

即將response.type = "blob"

示例代碼

download().done(res=>{const url = URL.createObjcetURL(res);//創建一個指向Blob的URLconst a = document.createElement("a");//創建一個a標簽用于下載a.href = url;
let fileName = `學生信息${new Date().format("yyyyMMddhhmmssSSS")}.xlsx`;
a.download = fileName; // 設置下載文件名
document.body.appendChild(a);//將a標簽添加到文檔中以觸發下載
a.click();//模擬點擊下載文件
document.body.removeChild(a);//移除a標簽})

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

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

相關文章

2024 年度時序數據庫 IoTDB 論文總結

論文成果總結 2024 年度&#xff0c;時序數據庫 IoTDB 在數據庫領域 CCF-A 類國際會議上共發表論文 8 篇&#xff0c;包括&#xff1a;SIGMOD 3 篇、VLDB 3 篇、ICDE 2 篇&#xff0c;涵蓋存儲、引擎、查詢、分析等方面。 2024 最后一天&#xff0c;我們將分類盤點 IoTDB 本年的…

ImportError: /lib/x86_64-linux-gnu/libc.so.6: version `GLIBC_2.32‘ not found

這個問題之前遇到過&#xff0c;沒有記錄&#xff0c;導致今天又花了2小時 原因是沒有GLIBC——2.32 使用以下命令查一下有哪些版本&#xff1a; strings /lib/x86_64-linux-gnu/libm.so.6 | grep GLIBC_ 我已經安裝好了&#xff0c;所有有2.32版本 原因是當前的ubuntu版本…

海南省大數據發展中心:數據資產場景化評估案例手冊(第二期)

2025年1月3日&#xff0c;海南省數據產品超市印發《數據資產場景化評估案例手冊&#xff08;第二期&#xff09;》&#xff08;以下簡稱《手冊》&#xff09;&#xff0c;該手冊是基于真實數據要素典型應用場景進行數據資產評估操作的指導性手冊&#xff0c;為企業在數據資產入…

python3GUI--智慧交通監控與管理系統 By:PyQt5

文章目錄 一&#xff0e;前言二&#xff0e;預覽三&#xff0e;軟件組成&技術難點1.軟件組成結構2.技術難點3.項目結構 四&#xff0e;總結 大小&#xff1a;35.5 M&#xff0c;軟件安裝包放在了這里! 一&#xff0e;前言 博主高產&#xff0c;本次給大家帶來一款我自己使…

Linux高并發服務器開發 第八天(makefile的規則 wildcard/patsubst函數 普通變量/自動變量/其他關鍵字)

目錄 1.makefile 1.1makefile的規則 1.2兩個函數 1.3三個自動變量 1.3.1普通變量 (自定義變量) 1.3.2自動變量 1.3.3其他關鍵字 - ALL/all - clean 1.makefile - 作用&#xff1a;進行項目管理。 - 初步學習&#xff1a;1個規則、2個函數、3個自動變量。 - 要想使用默…

Vue動態控制disabled屬性

參考:https://blog.csdn.net/guhanfengdu/article/details/126082781 在Vue中disabled:的值是受布爾值影響的&#xff0c;false為關閉禁用&#xff0c;true為開啟禁用效果。 結果就是true會讓按鈕禁用 相反false會讓按鈕重新可以使用 那如果想要通過id屬性值來判斷是否禁用…

【DevOps】Jenkins項目發布

Jenkins項目發布 文章目錄 Jenkins項目發布前言資源列表基礎環境一、Jenkins發布靜態網站1.1、項目介紹1.2、部署Web1.3、準備gitlab1.4、配置gitlab1.5、創建項目1.6、推送代碼 二、Jenkins中創建gitlab憑據2.1、創建憑據2.2、在Jenkins中添加遠程主機2.3、獲取gitlab項目的UR…

每日一學——自動化工具(Jenkins)

3.2 Jenkins 3.2.1 CI/CD流程設計 嘿&#xff0c;小伙伴們&#xff01;今天我們來聊聊Jenkins——這個在持續集成&#xff08;CI&#xff09;和持續部署&#xff08;CD&#xff09;領域里大名鼎鼎的工具。Jenkins不僅可以幫我們自動化構建和測試代碼&#xff0c;還能自動部署…

Vue2/Vue3使用DataV

Vue2 注意vue2與3安裝DataV命令命令是不同的Vue3 DataV - Vue3 官網地址 注意vue2與3安裝DataV命令命令是不同的 vue3vite 與 Vue3webpack 對應安裝也不同vue3vite npm install kjgl77/datav-vue3全局引入 // main.ts中全局引入 import { createApp } from vue import Da…

【AI學習】Transformer深入學習(二):從MHA、MQA、GQA到MLA

前面文章&#xff1a; 《Transformer深入學習&#xff08;一&#xff09;&#xff1a;Sinusoidal位置編碼的精妙》 一、MHA、MQA、GQA 為了降低KV cache&#xff0c;MQA、GQA作為MHA的變體&#xff0c;很容易理解。 多頭注意力&#xff08;MHA&#xff09;&#xff1a; 多頭注…

trendFinder - 利用 AI 掌握社交媒體上的熱門話題

1600 Stars 177 Forks 7 Issues 2 貢獻者 MIT License Javascript 語言 代碼: https://github.com/ericciarla/trendFinder 更多AI開源軟件&#xff1a;AI開源 - 小眾AI Trend Finder 收集并分析來自關鍵影響者的帖子&#xff0c;然后在檢測到新趨勢或產品發布時發送 Slack 通知…

以圖像識別為例,關于卷積神經網絡(CNN)的直觀解釋

大家讀完覺得有意義記得關注和點贊&#xff01;&#xff01;&#xff01; 作者以圖像識別為例&#xff0c;用圖文而非數學公式的方式解釋了卷積神經網絡的工作原理&#xff0c; 適合初學者和外行掃盲。 目錄 1 卷積神經網絡&#xff08;CNN&#xff09; 1.1 應用場景 1.2 起…

Python 數據結構揭秘:棧與隊列

棧&#xff08;Stack&#xff09; 定義 棧是一種后進先出&#xff08;Last In First Out, LIFO&#xff09;的數據結構。它類似于一個容器&#xff0c;只能在一端進行插入和刪除操作。棧有兩個主要的操作&#xff1a;push&#xff08;入棧&#xff09;和 pop&#xff08;出棧…

vim 的基礎使用

目錄 一&#xff1a;vim 介紹二&#xff1a;vim 特點三&#xff1a;vim 配置四&#xff1a;vim 使用1、vim 語法格式2、vim 普通模式&#xff08;1&#xff09;保存退出&#xff08;2&#xff09;光標跳轉&#xff08;3&#xff09;文本刪除&#xff08;4&#xff09;文本查找&…

HP 電腦開機黑屏 | 故障判斷 | BIOS 恢復 | BIOS 升級

注&#xff1a;本文為 “HP 電腦開機黑屏 | 故障判斷 | BIOS 恢復 | BIOS 升級” 相關文章合輯。 引文圖片 csdn 轉儲異常&#xff0c;重傳。 篇 1&#xff1a;Smart-Baby 回復中給出故障現象判斷參考 篇 2、篇3 &#xff1a;HP 官方 BIOS 恢復、升級教程 開機黑屏&#xff0c…

JAVA:利用 Redis 實現每周熱評的技術指南

1、簡述 在現代應用中&#xff0c;尤其是社交媒體和內容平臺&#xff0c;展示熱門評論是常見的功能。我們可以通過 Redis 的高性能和豐富的數據結構&#xff0c;輕松實現每周熱評功能。本文將詳細介紹如何利用 Redis 實現每周熱評&#xff0c;并列出完整的實現代碼。 2、需求分…

VSCode下配置Blazor環境 斷點調試Blazor項目

VSCode下使用Blazor的環境配置和插件推薦 Blazor是一種用于構建交互式Web UI的.NET框架&#xff0c;它可以讓你使用C#、Razor和HTML進行Web開發&#xff0c;而不需要JavaScript。在這篇文章中&#xff0c;我們將介紹如何在VSCode中配置Blazor環境&#xff0c;并推薦一些有用的…

《Rust權威指南》學習筆記(一)

基本介紹 1.Rust使用場景 &#xff1a;需要運行速度、需要內存安全、更好的利用多處理器。程序員無法在安全的Rust代碼中執行任何非法的內存操作。相對于C#等帶有垃圾回收機制的語言來講&#xff0c;Rust遵循了零開銷抽象&#xff08;Zero-Cost Abstraction&#xff09;規則&a…

STM32-筆記26-WWDG窗口看門狗

一、簡介 窗口看門狗用于監測單片機程序運行時效是否精準&#xff0c;主要檢測軟件異常&#xff0c;一般用于需要精準檢測程序運行時間的場合。 窗口看門狗的本質是一個能產生系統復位信號和提前喚醒中斷的6位計數器&#xff08;有的地方說7位。其實都無所謂&#xff0…

ARM CCA機密計算安全模型之固件更新

安全之安全(security)博客目錄導讀 目錄 1、遠程更新 2、本地更新 3、魯棒性 1、遠程更新 Arm歡迎關于CCA固件更新需求的反饋。一般而言&#xff0c;CCA固件更新過程可以描述如下&#xff1a; CCA固件更新客戶端使用固件更新協議與遠程更新服務通信。CCA固件更新客戶端將…