SpringBoot下載docx文檔方式
SpringBoot下載docx文檔
功能需求很簡(jiǎn)單:我想實(shí)現(xiàn)一個(gè)在線下載簡(jiǎn)歷docx文檔的功能
實(shí)現(xiàn)效果如下:點(diǎn)擊下載后,就出現(xiàn)下載的文檔

目前該方式有局限性只能下載微軟的word文檔,而wps的會(huì)下載失敗
一、具體代碼
使用的庫(kù)為 org.apache.poi 專門處理Microsoft 的文檔
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-scratchpad</artifactId>
<version>5.2.2</version>
</dependency>
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml</artifactId>
<version>5.2.2</version>
</dependency>實(shí)現(xiàn)思路:
(1)讀取簡(jiǎn)歷文件進(jìn)入輸入流 (輸入流讀取文件)
(2)利用 XWPFDocument 裝載 讀取的數(shù)據(jù)流,將其寫入 響應(yīng)里面
public void downloadDoc(HttpServletResponse response) throws UnsupportedEncodingException {
String baseUrl = "D:\\testDownload\\";
String temp = "5939.docx";
File file = new File(baseUrl + temp);
//獲取文件名
String filename = file.getName();
//獲取后綴名
int i = filename.lastIndexOf(".");
String extension = filename.substring(i+1);
//設(shè)置響應(yīng)的信息
response.reset();
response.setCharacterEncoding("UTF-8");
response.setHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode(filename, "utf8"));
response.setHeader("Pragma", "no-cache");
response.setHeader("Cache-Control", "no-cache");
//設(shè)置瀏覽器接受類型為流
response.setContentType("application/octet-stream;charset=UTF-8");
try {
InputStream in = new FileInputStream(file);
// 將文件寫入輸入流
OutputStream out = response.getOutputStream();
if("docx".equals(extension) || "doc".equals(extension)) {
//docx文件就以XWPFDocument創(chuàng)建
XWPFDocument docx = new XWPFDocument(in);
docx.write(out);
docx.close();
} else {
//其他類型的文件,按照普通文件傳輸 如(zip、rar等壓縮包)
int len;
//一次傳輸1M大小字節(jié)
byte[] bytes = new byte[1024];
while ((len = in.read(bytes)) != -1) {
out.write(bytes , 0 , len);
}
}
} catch (Exception e) {
e.printStackTrace();
}
}二、前端如何下載
我使用最簡(jiǎn)單的方式:window.open(ulr)
總結(jié)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
Java循環(huán)對(duì)bean的屬性進(jìn)行賦值的實(shí)現(xiàn)
本文主要介紹了Java循環(huán)對(duì)bean的屬性進(jìn)行賦值,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-08-08
淺析springcloud 整合 zipkin-server 內(nèi)存日志監(jiān)控
Zipkin是一款開源的分布式實(shí)時(shí)數(shù)據(jù)追蹤系統(tǒng)(Distributed Tracking System),其主要功能是聚集來自各個(gè)異構(gòu)系統(tǒng)的實(shí)時(shí)監(jiān)控?cái)?shù)據(jù)。這篇文章主要介紹了springcloud 整合 zipkin-server 內(nèi)存日志監(jiān)控,需要的朋友可以參考下2019-11-11
mybatis-plus阻止全表更新與刪除的實(shí)現(xiàn)
BlockAttackInnerInterceptor 是mybatis-plus的一個(gè)內(nèi)置攔截器,用于防止惡意的全表更新或刪除操作,本文主要介紹了mybatis-plus阻止全表更新與刪除的實(shí)現(xiàn),感興趣的可以了解一下2023-12-12
關(guān)于JDK8升級(jí)17及springboot?2.x升級(jí)3.x詳細(xì)指南
這篇文章主要介紹了關(guān)于JDK8升級(jí)17及springboot?2.x升級(jí)3.x的相關(guān)資料,還討論了JPA包路徑從javax改為jakarta,以及Spring?Boot版本升級(jí)和Redis配置調(diào)整等,需要的朋友可以參考下2025-01-01
Springboot mybais配置多數(shù)據(jù)源過程解析
這篇文章主要介紹了Springboot+mybais配置多數(shù)據(jù)源過程解析,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-03-03
mybatis if傳入字符串?dāng)?shù)字踩坑記錄及解決
這篇文章主要介紹了mybatis if傳入字符串?dāng)?shù)字踩坑記錄及解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2023-02-02

