javascript
SpringBoot + iframe 前后端实现简单实用的下载文件、导出excel案例
大家JavaWeb項目中應(yīng)該都會遇到下載文件或?qū)С鰁xcel的需求,特此分享此文,簡單明了,可用于實際項目。
1、前端頁面,模擬兩個按鈕:下載文件、導(dǎo)出excel?
注:本案例是使用 SpringBoot 構(gòu)建的項目,我這里使用的是之前介紹SpringBoot 實現(xiàn)CORS而創(chuàng)建的工程,也可以自己重新創(chuàng)建一個新的SpringBoot項目即可,然后新增如下一個html或jsp頁面,使用iframe隱藏域,這里根據(jù)id給 iframe標(biāo)簽,設(shè)置src屬性(改變),會發(fā)起一個請求。
不熟悉的可以移步我的另一篇文章:https://blog.csdn.net/a1036645146/article/details/98843846?
2、下載文件
這里只是測試,直接是一段自定義內(nèi)容,然后通過 OutputStream 輸出流進(jìn)行響應(yīng)。如果是實際業(yè)務(wù),如需從FAST服務(wù)器下載,將此替換為自己的下載方法即可,并將下載的內(nèi)容轉(zhuǎn)為byte[] 字節(jié)數(shù)組,通過?OutputStream 輸出字節(jié)內(nèi)容即可,并且記得設(shè)置response響應(yīng)頭信息等,具體如下:
/*** @description: 下載測試* @author: xianhao_gan* @date: 2019/08/15**/ @Controller public class TestController {@RequestMapping("/download")public void download(HttpServletRequest request, HttpServletResponse response){try {//用于輸出響應(yīng)流OutputStream out = response.getOutputStream();byte[] content = "測試下載內(nèi)容:hello,stwen.".getBytes();//如果從自己fast下載//String path = request.getParameter("path");//byte[] content = FDSTUtil.download(path);//文件名也可以從前端傳遞過來//String fileName = request.getParameter("fileName");String fileName = "stwen.txt";//設(shè)置響應(yīng)頭信息// rep.setContentType("Image/" + fileName); // 設(shè)置相應(yīng)類型,告訴瀏覽器輸出的內(nèi)容為圖片response.setHeader("Pragma", "No-cache"); // 設(shè)置響應(yīng)頭信息,告訴瀏覽器不要緩存此內(nèi)容response.setHeader("Cache-Control", "no-cache");response.setHeader("Content-Disposition", "attachment;filename=" +new String(fileName.getBytes("UTF-8"), "iso-8859-1"));response.setContentType("application/octet-stream");//輸出并關(guān)閉out.write(content);out.flush();out.close();} catch (IOException e) {e.printStackTrace();}} }3、導(dǎo)出excel文件
提供一個控制器接口方法,接收前端導(dǎo)出請求:
@RequestMapping("/excel")public void excel(HttpServletRequest request, HttpServletResponse response) throws Exception{OutputStream out = response.getOutputStream();try {//封裝好數(shù)據(jù)到Workbook對象,然后通過OutputStream輸出Workbook workBook = ExcelUtil.exportExcel();if (workBook != null) {String name = new String("stwen.xls");response.reset();response.setContentType("Content-Type: application/vnd.ms-excel");response.addHeader("Content-Disposition", "attachment;filename=\"" + name + "\"");workBook.write(out);out.flush();out.close();}} catch (Exception e) {e.printStackTrace();//先清空輸出流里面的內(nèi)容response.reset();String returnS = "<script type='text/javascript'>alert('導(dǎo)出失敗!');</script>";out.write(returnS.getBytes("UTF-8"));}}WorkBook依賴如下:
<dependency><groupId>org.apache.poi</groupId><artifactId>poi</artifactId><version>3.15</version></dependency>excelUtil工具類,實際項目,可能需要讀取數(shù)據(jù)庫,而excel也可以配置模板,封裝到Workbook 對象,返回控制器,通過輸出流響應(yīng)
package com.stwen.cors.util;import org.apache.poi.hssf.usermodel.HSSFCell; import org.apache.poi.hssf.usermodel.HSSFRow; import org.apache.poi.hssf.usermodel.HSSFWorkbook; import org.apache.poi.ss.usermodel.Sheet; import org.apache.poi.ss.usermodel.Workbook;/*** @description: excel工具類* @author: xianhao_gan* @date: 2019/08/15**/ public class ExcelUtil {/*** 導(dǎo)出excel* @return* @throws Exception*/public static Workbook exportExcel() throws Exception{//可選擇模板是.xls格式還是.xlsx格式HSSFWorkbook workbook = new HSSFWorkbook();//創(chuàng)建一個sheet表,可設(shè)置多個sheetSheet sheet = workbook.createSheet("sheet1");sheet.setColumnWidth(0,6000 );sheet.setColumnWidth(1,6000 );sheet.setColumnWidth(2,6000 );String []tableHeader = new String[] {"工號","姓名","職位"};HSSFRow firstRow = (HSSFRow) sheet.createRow((short) 0);for(int i = 0; i < tableHeader.length; i++){HSSFCell cell = firstRow.createCell((short)i);cell.setCellStyle(workbook.createCellStyle());cell.setCellValue(tableHeader[i]);}return workbook;} }4、啟動項目
瀏覽器訪問項目地址,然后分別點擊“下載文件”、“導(dǎo)出excel”
stwen.txt文件內(nèi)容如下:
stwen.xls?
看完后是不是覺得下載很簡單,覺得有用點個贊再走吧0.0,整理不易。
本文來自:CSDN? 作者:stwen_gan??https://blog.csdn.net/a1036645146/article/details/99639041
轉(zhuǎn)載請注明出處,謝謝。
總結(jié)
以上是生活随笔為你收集整理的SpringBoot + iframe 前后端实现简单实用的下载文件、导出excel案例的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: SRTE测试
- 下一篇: 后端技术:Java代码优秀案例,一定对你