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

解决办法:

  把对应的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;
    }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

QC班长

班长有话说:要是有瓶水喝就好了

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值