在IE8与IE9的情况下下载文档如果取消下载会出一下ClientAbortException: java.io.IOException异常,网上的情况也很普遍,我的情况算是手动终止程序出现的问题,参考这个帖子http://blog.163.com/yiba_suanzao/blog/static/130557377201011235337202/
这个是有问题的代码
fileName = java.net.URLEncoder.encode(fileName,"UTF-8");
response.setHeader("Content-disposition","attachment;filename="+fileName);
OutputStream out = response.getOutputStream();
byte d[] = new byte[256];
int count = 0;
FileInputStream in = new FileInputStream(file);
while((count = in.read(d)) != -1){
out.write(d,0,count);
}
out.flush();
out.close();
in.close();
} catch (IOException e) {
e.printStackTrace();
}
这个是不出错的代码把out.flush()放到了循环里,每次都清空
File file = new File(fileName);
FileInputStream in=null;
OutputStream out=null;
try {
response = ServletActionContext.getResponse();
response.setContentType("application/-excel");
if (fileName.lastIndexOf("\\")>0) {
fileName=fileName.substring(fileName.lastIndexOf("\\")+1);
}
fileName = java.net.URLEncoder.encode(fileName,"UTF-8");
response.setHeader("Content-disposition","attachment;filename="+fileName);
out = response.getOutputStream();
byte d[] = new byte[256];
int count = 0;
in = new FileInputStream(file);
while((count = in.read(d))>0 ){
out.write(d,0,count);
out.flush();
}
} catch (IOException e) {
logger.error(e);
}finally{
if(in!=null)in.close();
if(out!=null)out.close();
}
其实我把
out.flush();去掉就没有问题。对于IO不怎么熟,才疏学浅,没法好好解释其中的原理,如有更好的解决方法,大家一起讨论下。