2016-07-05 69 views
0

我的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) { 
    } 
} 

回答

1

如果你真的想下载一个文件,我想你应该设置你的headerresponse这样的:

response.setHeader("Content-Encoding", "UTF-8"); 
response.setHeader("Content-Disposition", "attachment; filename=worksheet.xls"); 
response.setContentType("application/octet-stream"); 
0

我发现问题是在JavaScript on the page我用来保证下载自动开始。出于某种原因,它破坏了文件编码。 我终于解决了这个问题,所以我不是将数据写入响应输出流,而是将它存储在一个临时文件中,并提供了一个链接。然后我用jQuery FileDownload plugin下载它。它工作正常。

0

converter中所述,您的ResponseEntity可能被“转换”。查找配置,例如WebMvcConfigurerAdapter。如果使用任何转换器,特别是默认的转换器(如json或xml): 在每个转换器类write方法中放置一个中断标记以确定使用哪个转换器。