为什么下载的文件已损坏?

问题描述 投票:0回答:3

我的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) {
    }
}
spring spring-mvc
3个回答
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方法中放置一个中断标记,以找出使用的转换器。

© www.soinside.com 2019 - 2024. All rights reserved.