abosten_love 2009-12-09 11:37
浏览 711
已采纳

文件下载时异常: getOutputStream() has already been called for this response

           [color=red]  Stirng fileName = request.getParameter("fileName");//Redirect();[/color]
    [color=red]//String fileName = request.getAttribute("fileName").toString();//forward()[/color]
    try{
                File file = new File(filePath);
                FileInputStream bis = new FileInputStream(file);
                response.reset();
                response.setContentType("APPLICATION/OCTET-STREAM; charset=utf-8");
                response.setHeader("Content-disposition", "attachment; filename= " + fileName);
                /*response.setHeader("Content-disposition","filename=" + fileName);*/
                response.setContentLength((int) file.length());

                OutputStream bos = response.getOutputStream();

                byte[] buff = new byte[1024];
                int readCount = 0;
                readCount = bis.read(buff);
                while (readCount != -1)
                {
                    bos.write(buff, 0, readCount);
                    readCount = bis.read(buff);
                }
                bos.flush();
                if(bis != null)
                {
                    bis.close();
                }
                if(bos != null)
                {
                    bos.close();
                }

            }
            catch (Throwable e)
            {
                //e.printStackTrace();
            }finally{
                out.clear();
                out = pageContext.pushBody();
            }      

如果 是重定向到下载页面 不会出异常 但是如果forward(),
依然报getOutputStream() has already been called for this response

展开全部

  • 写回答

1条回答 默认 最新

  • javabull 2009-12-09 12:01
    关注

    getOutputStream()和getWriter()这两个方法不能在一个请求内同时使用,如果使用forward,这时将要跳转到的页面是要用getWriter方法获得输出流把页面内容发送到浏览器,但之前以经使用了getOutputStream,而且是同一请求,所以出错了,使用redirect因为是两个不同的请求,所以不会出错。下载时你可以打开新页面来下载,这样下载完了之前页面也还在。

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
编辑
预览

报告相同问题?

手机看
程序员都在用的中文IT技术交流社区

程序员都在用的中文IT技术交流社区

专业的中文 IT 技术社区,与千万技术人共成长

专业的中文 IT 技术社区,与千万技术人共成长

关注【CSDN】视频号,行业资讯、技术分享精彩不断,直播好礼送不停!

关注【CSDN】视频号,行业资讯、技术分享精彩不断,直播好礼送不停!

客服 返回
顶部