在大数据量导出的解决方案中,我使用了POI将数据分多个Excel文件写入并最后打包成压缩文件的方案,目前20万条数据导出基本不会发生POI数据异常,但每次当数据全部写到Excel文件并压缩成rar文件后,调用HttpServleteResponse.getOutputStream().write()方法时,前端页面总是呈现假死状态,有时还会导致weblogic堆栈溢出。 关键代码如下所示(其中的response是HttpServletResponse对象):
OutputStream os = null;
InputStream ins = null;
String fullZipFileName = zipFileDir + file_separator + zipFileName;
try {
os = response.getOutputStream();
byte[] contents = new byte[1024];
ins = new BufferedInputStream(new FileInputStream(fullZipFileName));
while(ins.read(contents, 0, 1024) != -1) {
os.write(contents);
}
os.flush();
} catch (Exception e) {
response.setHeader("Content-Disposition", "attachment; filename=" + zipFileName);
} finally {
try {
if (os != null) {
os.close();
}
if (ins != null) {
ins.close();
}
} catch (Exception e) {
//throw new RuntimeException(e);
}
}
//将临时文件删除
FileOperUtil.deleteDirectory(this.tempParentDir, true);
clearGarbage(); //垃圾回收
}
请高手帮忙看一下?万分感谢。