大家JavaWeb项目中应该都会遇到下载文件或导出excel的需求,特此分享此文,简单明了,可用于实际项目。
1、前端页面,模拟两个按钮:下载文件、导出excel
注:本案例是使用 SpringBoot 构建的项目,我这里使用的是之前介绍SpringBoot 实现CORS而创建的工程,也可以自己重新创建一个新的SpringBoot项目即可,然后新增如下一个html或jsp页面,使用iframe隐藏域,这里根据id给 iframe标签,设置src属性(改变),会发起一个请求。
不熟悉的可以移步我的另一篇文章:https://blog.csdn.net/a1036645146/article/details/98843846
2、下载文件
这里只是测试,直接是一段自定义内容,然后通过 OutputStream 输出流进行响应。如果是实际业务,如需从FAST服务器下载,将此替换为自己的下载方法即可,并将下载的内容转为byte[] 字节数组,通过 OutputStream 输出字节内容即可,并且记得设置response响应头信息等,具体如下:
/**
* @description: 下载测试
* @author: xianhao_gan
* @date: 2019/08/15
**/
@Controller
public class TestController {
@RequestMapping("/download")
public void download(HttpServletRequest request, HttpServletResponse response){
try {
//用于输出响应流
OutputStream out = response.getOutputStream();
byte[] content = "测试下载内容:hello,stwen.".getBytes();
//如果从自己fast下载
//String path = request.getParameter("path");
//byte[] content = FDSTUtil.download(path);
//文件名也可以从前端传递过来
//String fileName = request.getParameter("fileName");
String fileName = "stwen.txt";
//设置响应头信息
// rep.setContentType("Image/" + fileName); // 设置相应类型,告诉浏览器输出的内容为图片
response.setHeader("Pragma", "No-cache"); // 设置响应头信息,告诉浏览器不要缓存此内容
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");
//输出并关闭
out.write(content);
out.flush();
out.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
3、导出excel文件
提供一个控制器接口方法,接收前端导出请求:
@RequestMapping("/excel")
public void excel(HttpServletRequest request, HttpServletResponse response) throws Exception{
OutputStream out = response.getOutputStream();
try {
//封装好数据到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();
//先清空输出流里面的内容
response.reset();
String returnS = "<script type='text/javascript'>alert('导出失败!');</script>";
out.write(returnS.getBytes("UTF-8"));
}
}
WorkBook依赖如下:
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi</artifactId>
<version>3.15</version>
</dependency>
excelUtil工具类,实际项目,可能需要读取数据库,而excel也可以配置模板,封装到Workbook 对象,返回控制器,通过输出流响应
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 {
/**
* 导出excel
* @return
* @throws Exception
*/
public static Workbook exportExcel() throws Exception{
//可选择模板是.xls格式还是.xlsx格式
HSSFWorkbook workbook = new HSSFWorkbook();
//创建一个sheet表,可设置多个sheet
Sheet 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、启动项目
浏览器访问项目地址,然后分别点击“下载文件”、“导出excel”
stwen.txt文件内容如下:
stwen.xls
看完后是不是觉得下载很简单,觉得有用点个赞再走吧0.0,整理不易。
本文来自:CSDN 作者:stwen_gan https://blog.csdn.net/a1036645146/article/details/99639041
转载请注明出处,谢谢。