对于getOutputStream(),api里是这样说的:Either this method or getWriter()
may be called to write the body, not both.
也就是getOutputStream()和getWriter()
只能使用一个,把代码里的response.getOutputStream()全部删之后,统一使用response.getWriter()
作为输出流,问题解决。
全部代码如下:
response.setContentType( "application/octet-stream "); response.addHeader("Content-Disposition","attachment;filename=" + "work.xls"); java.io.FileInputStream fileInputStream = null; ServletOutputStream sos = null; PrintWriter writer = null; try { fileInputStream = new java.io.FileInputStream(file); writer = response.getWriter(); response.getOutputStream(); int i; while((i = fileInputStream.read()) != -1) { writer.write(i); } writer.flush(); } catch (FileNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } finally { if(sos != null) { try { sos.close(); } catch(IOException e) { e.printStackTrace(); } } if(fileInputStream != null) { try { fileInputStream.close(); } catch(IOException e) { e.printStackTrace(); } } if(writer != null) { writer.close(); } }
http://blog.csdn.net/yuzhongzhu/article/details/6290526