项目需求:
将指定内容按任务分别导出excel。
– 这里肯定要批量导出才行了,那么用压缩包,没毛病…
直接贴代码:
/**
* 以压缩包的方式下载excel
* @param response
* @param workbookMap
*/
public static void downloadExcelForZip(HttpServletResponse response,Map<String,Workbook> workbookMap,String zipName){
// 文件名外的双引号处理firefox的空格截断问题
try {
response.setContentType("application/*");
response.setHeader("content-disposition", "attachment;filename=" + new String(zipName.getBytes("gb2312"), "ISO8859-1"));
response.setCharacterEncoding("UTF-8");
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
try {
ServletOutputStream outputStream = response.getOutputStream();
ZipOutputStream out = new ZipOutputStream(outputStream);
for(String fileName:workbookMap.keySet()){
Workbook workbook = workbookMap.get(fileName);
ZipEntry entry = new ZipEntry(fileName);
out.putNextEntry(entry);
//这里讲一下,workBook.write会指定关闭数据流,如果这里直接用workbook.write(out),下次就会抛出out已被关闭的异常,所有用ByteArrayOutputStream来拷贝一下。
ByteArrayOutputStream bos = new ByteArrayOutputStream();
workbook.write(bos);
bos.writeTo(out);
// 关闭输入流
out.closeEntry();
}
if(out!=null){
out.flush();
out.close();
}
} catch (IOException e) {
e.printStackTrace();
}
}