getOutputStream() has already been called for this response如何解决?

写文件下载接口中,发现不能再使用 resp.getWriter().write(""); 然后就报错:

getOutputStream() has already been called for this response

  resp.setHeader("content-disposition", "attachment;filename="
                    + URLEncoder.encode(name, "UTF-8").replaceAll("%28", "(").replaceAll("%29", ")"));
            OutputStream out = resp.getOutputStream();
            byte buffer[] = new byte[1024];
            int len = 0;
            // 循环将输入流中的内容读取到缓冲区当中
            while ((len = in.read(buffer)) > 0) {
                // 输出缓冲区的内容到浏览器,实现文件下载
                out.write(buffer, 0, len);
            }
            // 关闭输出流
            out.close();
            // 关闭文件输入流
            in.close();
            //long s = new Date().getTime();
            //Thread.sleep(2000);
            // long s1 = new Date().getTime();
            // System.out.println(s1 - s);
            resp.getWriter().write("");

现在的目的是既能使用resp.getOutputStream();也能使用resp.getWriter().write("");
有木有大神能帮忙解决一下???

阅读 8.6k
1 个回答
public ServletOutputStream getOutputStream()
        throws IOException {

        if (usingWriter) {
            throw new IllegalStateException
                (sm.getString("coyoteResponse.getOutputStream.ise"));
        }

        usingOutputStream = true;
        if (outputStream == null) {
            outputStream = new CoyoteOutputStream(outputBuffer);
        }
        return outputStream;

    }
    调用getOutputStream方法后会执行usingOutputStream = true;
    再调用getWriter方法
    if (usingOutputStream) {
            throw new IllegalStateException
                (sm.getString("coyoteResponse.getWriter.ise"));
        }
        就会抛出这个异常,if <code>getOutputStream</code> has
     *  already been called for this response,所以不能同时使用。
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题