項目需求:
將指定內容按任務分別導出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();
}
}