ServletOutputStream字节数组pdf损坏pdf



我使用tomcat 7.0.53, Struts 1.2.7, Spring 3.1.1。这是我的代码:

File file = new File("C:\pdf\" + report.getFileName());
FileOutputStream fos = new FileOutputStream(file);
fos.write(report.getData());
fos.close();
response.addHeader("Content-disposition", "application; filename="
                    + report.getFileName());
response.setContentType("application/pdf");
response.setContentLength(report.getData().length);
ServletOutputStream outputStream = response.getOutputStream();
outputStream.write(report.getData());
outputStream.flush();

我得到的文件是正确的没有问题。但是我从响应中得到的文件已经损坏。我试图设置编码响应,试图打开春季CharacterEncodingFilter, tomcat SetCharacterEncodingFilter。没有什么帮助。我应该看哪里?注:这段代码是在Struts中的Action执行方法

您可能想要保存从web服务器获得的结果,并将其与正确的pdf进行比较。通过这种方式,您将看到开头或结尾是否有一些额外的字节,编码差异或其他任何不同。

删除response.setContentLength(report.getData().length);并尝试它是否工作,通过这样做,您也启用了分组数据传输。

我需要返回null而不是ActionForward,这样Struts就知道响应是在action中处理的。

我有类似的问题-损坏的二进制图片。下载完毕。然后,在下载TXT/XML文件时,我注意到文本正文开头的空白行很少。

在JSP上使用上面的建议,我删除了管理下载的JSP页面中的所有换行符。因此,所有jsp和server标记都在一行中:
<jsp:useBean.. ><%..response.  ;response.setStatus(HttpServletResponse.SC_RESET_CONTENT);return; %>

这删除了TXT/XML中额外的空白行,并解决了二进制损坏问题。

Olaf,谢谢你的提示

最新更新