【发布时间】:2020-06-03 05:29:46
【问题描述】:
我有几个 Java servlet (3.x - Tomcat 8) 正在运行,它们生成并返回 PDF 文档。我从来没有遇到过任何问题。我最近编写了一个新的 servlet 来创建和返回一个 PDF 文档,这个新的 servlet 使用的响应代码与其他人使用的完全相同:
response.reset();
response.setContentType("application/pdf");
response.setHeader("Content-Transfer-Encoding", "binary");
response.setHeader("Content-Disposition","attachment; filename=\""+filename+".pdf\"");
response.setContentLength(pdfBytes.length);
System.out.println("# Bytes => " + pdfBytes.length);
ServletOutputStream sos = response.getOutputStream();
BufferedOutputStream bos = new BufferedOutputStream(sos);
bos.write(pdfBytes);
sos.flush();
sos.close();
正如我所说,这与其他的工作正常,但是当我调用新的 servlet 时,它返回 0 字节,即使上面的打印语句具有非零值。
但是,如果我将上面的响应编写代码更改为:
OutputStream os = response.getOutputStream();
os.write(pdfBytes);
os.flush();
os.close();
...它工作正常,返回格式良好的 PDF 文档。为什么会发生这种情况?
【问题讨论】:
-
不应该
sos.flush();是bos.flush();等等吗?