如标题所描述
错误:getOutputStream() has already been called for this response
解决方案
action的返回值置为null
后台代码
public String downExcel() throws IOException{ System.out.println("下载模板type:"+type); String str = getSavePath()+"//"+"excel"; switch (type) { case "TFFW": str+="//"+"TFFW.xls"; break; } File f = new File(str); //需要 response.reset() 来清除首部的空白行。 response.reset(); //设置格式,防止乱码 response.setContentType("application/vnd.ms-excel;charset=utf-8"); ServletOutputStream out=response.getOutputStream(); BufferedInputStream bis=null; BufferedOutputStream bos=null; try { switch (type) { case "TFFW": response.setHeader("Content-Disposition", "attachment;filename="+ new String(("突发事件服务模板" + ".xls").getBytes(), "iso-8859-1")); //下载文件的名称 break; } bis=new BufferedInputStream(new FileInputStream(f)); bos=new BufferedOutputStream(out); byte[] buff=new byte[2048]; int bytes; while(-1!=(bytes =bis.read(buff,0,buff.length))){ bos.write(buff,0,bytes); } } catch (IOException e) { // TODO Auto-generated catch block throw e; } finally{ if(bis!=null){ bis.close(); } if(bos != null){ bos.close(); } } return null; } |
前端调用
var url = ctxPath+"/ywhJson/ywhExcel-json!downExcel.action?type="+type; location.href =url; |