关于SpringMVC 的文件下载实例
今天项目用到了在服务器下载文件的问题,这里简单总结一下(关于SpringMVC的基础配置这里省略不提,需要的小伙伴可以看前面的文章)
实例为把数据库数据导出为.xls结尾的文件,如果需要导出为.xlsx的文件,只需要把HSS……相关对象改变为XSS……即可;
下面贴代码(步骤请看注释):
/**
* 静态创建*.xls文件方法
* @param sheetName 下脚标题
* @param titleName 标题
* @param attList 集合数组对象
* @return
*/
public static HSSFWorkbook excelExport(String sheetName, String titleName[], List<String[]> attList){
// 第一步,创建HSSFWorkbook,对应一个Excel文件
HSSFWorkbook wb = new HSSFWorkbook();
// 第二步,在webbook中添加一个sheet,对应Excel文件中的sheet
HSSFSheet sheet = wb.createSheet(sheetName);
// 第三步,在sheet中添加表头第0�?注意老版本poi对Excel的行数列数有限制short
HSSFRow row = sheet.createRow((int) 0);
// 第四步,创建单元格,并设置表头 设置表头居中
HSSFCellStyle style = wb.createCellStyle();
style.setAlignment(HSSFCellStyle.ALIGN_CENTER); // 创建表格居中格式
HSSFCell cell = null;
for (int i = 0; i < titleName.length; i++) {
cell = row.createCell((short) i);
cell.setCellValue(titleName[i]);
cell.setCellStyle(style);
}
// 第五步,写入实体数据 实际应用中这些数据从数据库得到,
for (int i = 0; i < attList.size(); i++)
{
row = sheet.createRow((int) i + 1);
//得到数组对象(逻辑层)
String attribute[] = attList.get(i);
for (int j = 0; j < attribute.length; j++) {
if(attribute[j] == null || attribute[j].equals("")){
row.createCell((short) j).setCellValue("");
}else{
row.createCell((short) j).setCellValue(attribute[j]);
}
}
}
// 第六步,将文件存到指定位,掉用方法中进行
return wb;
}
偷下懒把逻辑层和控制层合并写在一起
@RequestMapping("/manage/TourisExcelExport")
public String excelExport2(HttpServletRequest request, HttpServletResponse response, String userType){
String titleName[] = { "序号", "类型", "等级", "第三方联系", "用户邮箱", "用户名字", "电话", "国家", "备注" };
// 第五步,写入实体数据 实际应用中这些数据从数据库得到,
List list = null;
try {
if(userType.equals("vip")){
list = userServiceImpl.findAll();
}else{
list = userServiceImpl.findAllTourist();
}
} catch (Exception e1) {
e1.printStackTrace();
}
List<String[]> attList = new ArrayList<String[]>();
for (int i = 0; i < list.size(); i++)
{
User user = (User) list.get(i);
String num = i+1+"";
String attribute[] = {num, user.getUserType().getTinfo(),
user.getUserLevel().getLname(),
user.getUserOther().getOtherinfo(), user.getUemail(), user.getUname(),
user.getUphone(), user.getUcountry(), user.getNote()};
attList.add(attribute);//添加数组对象
}
//得到HSSFWorkbook对象
HSSFWorkbook wb = ExcelUtil.excelExport("用户表(游客)", titleName, attList);
// 第六步,将文件存到指定位
try
{
//设置响应头
response.setContentType("application/vnd.ms-excel");
response.setCharacterEncoding("utf-8");
//这里对文件名进行编码,保证下载时汉字显示正常
String fileName = URLEncoder.encode(System.nanoTime()+".xls", "utf-8");
//Content-disposition属性设置成以附件方式进行下载
response.setHeader("Content-disposition", "attachment;filename="
+ fileName);
OutputStream fout = response.getOutputStream();
//FileOutputStream fout = new FileOutputStream(file);
wb.write(fout);//写入
fout.close();
}
catch (Exception e)
{
e.printStackTrace();
}
return null;
}
视图层
<a href="/manage/TourisExcelExport.action"></a>/*根据自己配置添加或不添加后缀(.action)*/
结果(如下图):