强制浏览器在JAVA中下载docx文件会生成损坏的文档

时间:2012-05-03 12:24:24

标签: java ms-office mime-types docx force-download

使用JAVA,我试图强制浏览器下载文件。

以下是我目前使用的代码:

response.reset();
response.resetBuffer();
response.setContentType(mimeType);
response.setHeader("Content-Disposition", "attachment; filename=\"" + fileName + "\"");

InputStream in = new FileInputStream(file);
OutputStream out = response.getOutputStream();
IOUtils.copy(in, out);

out.flush();
out.close();
in.close();
response.flushBuffer();

几乎,但是当强制下载docx文档(MS Office 2007+)时,下载的文件已损坏(至少,这就是MS Office告诉我的内容) )。如果我尝试直接在存储它们的服务器上打开它,则不会出现该错误,这意味着下载时问题确实会产生干扰(而不是在上传时)。

根据IANA,此类文件的MIME类型应为application/vnd.openxmlformats-officedocument.wordprocessingml.document (1),但指定MIME类型无法解决问题。

网上有几个曲目,但它们都不适合我。 ASP.NET中似乎有solution,但我在JAVA中找不到相应的内容。

我也尝试使用MIME类型application/vnd.ms-word (2),因为我看到there,但下载的文件仍然已损坏。同意MIME类型application/msword (3)一个人建议here,一般MIME类型application/octet-stream (4)正如this forum提出的那样。

然后,对于这四种MIME类型中的每一种,我都尝试将下载文件的名称从myfile.docx更改为myfile.doc(不再是 x ),但是问题仍然存在。

那么,如何强制下载未损坏的下载 docx文件?我的代码是否正确?

1 个答案:

答案 0 :(得分:2)

我偶然尝试添加更多标头,事实上,Content-Length标头解决了问题......

所以最后,我只是添加这一行来使它工作:

response.setContentLength((int) file.length());