强制浏览器在 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());

相关内容

  • 没有找到相关文章

最新更新