强制浏览器下载文件的docx在JAVA产生损坏的文件(Forcing the browser to

2019-07-29 06:07发布

使用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文件(微软Office 2007+),下载的文件被破坏(至少,这就是微软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.docxmyfile.doc (NO x的了),但问题仍然存在。

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

Answer 1:

我试图通过的几率增加更多的报头,而事实上,在Content-Length头解决了这个问题...

所以最后,我刚加入这行,使其工作:

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


文章来源: Forcing the browser to download a docx file in JAVA generates a corrupted document