使用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.docx
到myfile.doc
(NO x的了),但问题仍然存在。
那么,如何强制未损坏,当下载完的下载docx
文件? 是我的一段代码是否正确?