强制浏览器在JAVA中下载docx文件会生成损坏的文档
使用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类型application/msword
(3) 这里建议的人,以及此论坛上提出的通用MIME类型application/octet-stream
(4) 。
然后,对于这四种MIME类型中的每一种,我都尝试将下载文件的名称从myfile.docx
为myfile.doc
(不再是x ),但问题仍然存在。
那么,如何强制下载未损坏的下载 docx
文件? 我的代码是否正确?
我偶然尝试添加更多标题,事实上, Content-Length
标题解决了这个问题……
最后,我只需添加此行以使其工作:
response.setContentLength((int) file.length());