我使用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执行方法
中答案 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中的额外空白行,并解决了二进制损坏问题。
奥拉夫,谢谢你的线索