我的webapp正在使用Spring MVC。下面的端点允许用户下载文件。当用户将文件(Chrome,MSIE)保存在浏览器中时,它会被破坏。它的大小是28792字节而不是24567,内容似乎有不同的编码。我花了一天时间试图解决这个问题,但没有成功。源文件工作正常。请指教。非常感谢!
@RequestMapping(method = POST, consumes = MULTIPART_FORM_DATA_VALUE)
public void processFile(MultipartFile file, HttpServletResponse response) {
try {
response.setHeader("Content-Encoding","UTF-8");
Files.copy(Paths.get("c:\\files", "worksheet.xls"), response.getOutputStream());
response.getOutputStream().flush();
} catch (Exception ignore) {
}
}
如果你真的想下载一个文件,我认为你应该像这样设置你的header
或response
:
response.setHeader("Content-Encoding", "UTF-8");
response.setHeader("Content-Disposition", "attachment; filename=worksheet.xls");
response.setContentType("application/octet-stream");
我发现问题出在我用来确保下载自动启动的JavaScript on the page中。出于某种原因,它打破了文件编码。我终于解决了这个问题,因此我没有将数据写入响应输出流,而是将其存储在临时文件中并提供了一个链接。然后我用jQuery FileDownload plugin下载它。它工作正常。
如converter所述,你的ResponseEntity
有可能被“转换”。查找配置,例如在WebMvcConfigurerAdapter
中。如果使用任何转换器,尤其是默认转换器(如json或xml):在每个转换器类write
方法中放置一个中断标记,以找出使用的转换器。