需求:
将数据解析到多个xml中,压缩ZIP并下载
完整代码
/**
* xml生成并压缩成zip文件
* @param sourceId
* @param request
* @param response
*/
@RequestMapping("/download")
public void generateXML(HttpServletRequest request,HttpServletResponse response){
LOGGER.info("--------------开始准备生成XML--------------");
//......省略部分业务代码
//压缩文件名 时间+区划
String zipName = time+"-"+areaTree.getCode()+".zip";
byte[] buf = new byte[1024];
// 获取输出流
BufferedOutputStream bos = null;
ZipOutputStream out = null;
try {
bos = new BufferedOutputStream(response.getOutputStream());
response.reset();
response.setContentType("multipart/form-data");
response.setCharacterEncoding("utf-8");
response.setHeader("Content-disposition", "attachment;filename=" + zipName);
out = new ZipOutputStream(bos);
if (listFiles!=null&&listFiles.length>0) {//listFiles为文件
for (int i = 0; i < listFiles.length; i++) {
FileInputStream in = new FileInputStream(listFiles[i]);
ZipEntry zipEntry = new ZipEntry(listFiles[i].getName());
// 给列表中的文件单独命名
out.putNextEntry(zipEntry);
int len;
while ((len = in.read(buf)) > 0) {
out.write(buf, 0, len);
}
in.close();
in = null;
out.closeEntry();
}
}
this.dateTimeToken = dateTimeToken;
} catch (IOException e) {
e.printStackTrace();
//删除服务器上的xml文件
deleteFile(xmlFile);
} finally{
try {
out.close();
out = null;
bos.close();
bos = null;
} catch (IOException e) {
e.printStackTrace();
}
}
long endTime=System.currentTimeMillis();
LOGGER.info("--------------压缩XML成功,运行时间是:"+((endTime-startTime)/1000)+"s --------------");
}