ServletOutputStream字节数组到pdf损坏pdf

时间:2014-07-15 10:15:01

标签: spring tomcat servlets struts outputstream

我使用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();

我得到的文件没问题。但是我从响应中获得的文件已损坏。我试图将编码设置为响应,试图打开spring CharacterEncodingFilter,tomcats SetCharacterEncodingFilter。什么都没有帮助。我应该在哪里看? 附:此代码在Struts Action执行方法

4 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:0)

删除response.setContentLength(report.getData()。length);并尝试通过这样做,你也可以启用分块数据传输。

答案 2 :(得分:0)

我需要返回null而不是ActionForward,因此Struts知道响应是在动作中处理的。

答案 3 :(得分:-1)

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

在JSP上使用上面的建议,我删除了管理下载的JSP页面中的所有换行符。 所以所有jsp和服务器标签都在一行中出现:

<jsp:useBean.. ><%..response.  ;response.setStatus(HttpServletResponse.SC_RESET_CONTENT);return; %>

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

奥拉夫,谢谢你的线索

相关问题