使用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
文件?我的代码是否正确?
答案 0 :(得分:2)
我偶然尝试添加更多标头,事实上,Content-Length
标头解决了问题......
所以最后,我只是添加这一行来使它工作:
response.setContentLength((int) file.length());