今天在使用spring进行文件下载是,总报错:java.lang.IllegalStateException: getOutputStream() has already been calle

    xiaoxiao2026-04-19  3

    解决办法:

      把对应的action的返回设置为空,即可轻松解决。

    例如:

      @ActionAnnotation(name = "生成结婚报告文档并下载", group = "查询")     public ModelAndView createMarriage(HttpServletRequest request, HttpServletResponse response) throws Exception {         Management management = managementService.query(request.getParameter("mm_id"));         Map<String, Object> model = new HashMap<String, Object>();         model.put("management", management);         model.put("management", management);         String view = SystemParameter.get("marriage");         Template template = freeMarkerConfigurer.getConfiguration().getTemplate(SystemParameter.get("tempDirSoldier") + "/marriage.ftl", "utf-8");         String temp = FreeMarkerTemplateUtils.processTemplateIntoString(template, model);         File file = new File(getServletContext().getRealPath(view));         FileUtils.writeStringToFile(file, temp, "utf-8");         response.setContentType("text/html; charset=GBK");         response.setContentType("application/x-msdownload");   //设置response的编码方式         response.setContentLength((int) file.length());   //写明要下载的文件的大小         response.setHeader("Content-Disposition", "attachment;filename=" + new String(view.getBytes("gbk"), "iso-8859-1"));//解决中文乱码         FileInputStream fis = new FileInputStream(file);   //创建输入流         BufferedInputStream buff = new BufferedInputStream(fis);    //创建文件缓冲         OutputStream out = response.getOutputStream();         byte[] b = new byte[1024]; //设置缓冲大小         long k = 0; //用于判断文件长度是否为0         while (k < file.length()) {             int j = buff.read(b, 0, 1024);             k += j; //  累计文件长度             out.write(b, 0, j);         }         out.flush();  //将文件数据刷新到用户名电脑上         fis.close();         out.close();         file.delete(); // 删除临时文件         return  null;     }

    转载请注明原文地址: https://ju.6miu.com/read-1309007.html
    最新回复(0)