强制浏览器在JAVA中下载docx文件会生成损坏的文档

博主遇到一个问题,在使用Java强制浏览器下载docx文件时,文件会被损坏。尝试了多种MIME类型,包括应用了IANA推荐的类型,但问题依然存在。已排除文件上传时的错误,怀疑是下载过程中出现了干扰。寻求解决方案。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

使用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类型不能解决问题。

Web上有很多 曲目
,但是没有一个对我有用。似乎有一个解决方案ASP.NET,但我没有找到在等效JAVA

我也尝试使用MIME类型application/vnd.ms-word (2),*
就像我在那里看到的那样,但是下载的文件仍然损坏。一个人在这里建议使用MIME类型application/msword
(3) ,并在本论坛上提出的MIME类型 (4)
application/octet- stream 
*

然后,对于这四种MIME类型中的每一种,我试图将下载文件的名称从myfile.docx更改为myfile.doc(不再是 x
),但问题仍然存在。

那么,如何强制下载 未损坏的 docx文件?我的代码正确吗?


阅读 74

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值