1

使用 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,但我没有在 中找到等效的解决方案JAVA

我也尝试使用我在那里看到的 MIME 类型application/vnd.ms-word (2),但下载的文件仍然损坏。一个人在这里建议的 MIME 类型(3)和这个论坛上提出的通用 MIME 类型(4)的同上。application/msword application/octet-stream

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

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

4

1 回答 1

3

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

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

response.setContentLength((int) file.length());
于 2012-05-03T13:17:04.537 回答