【发布时间】:2018-08-05 17:41:52
【问题描述】:
我有一个从给定目录下载文件的 Springboot REST 应用程序。 下载的文件可以是任意文件,任意格式,我想用原来的文件名作为下载文件的文件名。
我使用下面的代码在header中设置文件名,并将header添加到响应中:
@RestController
@RequestMapping("/downloads")
public class DownloadCsontroller {
...
@GetMapping
public void downloadSingleFile(@RequestParam("file") String filename, HttpServletResponse response) throws IOException {
String filepath = m_attachmentPathLocation + File.separator + filename;
File file = new File(filepath);
String contentType = getContentType(file);
response.setStatus(HttpServletResponse.SC_OK);
response.setContentType(contentType);
response.setHeader("Content-Disposition:", "attachment;filename=\"" + file.getName() + "\"");
...
}
...
}
在 setHeader() 中使用“Content-Disposition”和“Content-Disposition:”进行了测试。
除了 PDF、ZIP、RAR、EXE 等之外,几乎所有东西都可以正常工作(文件类型)。
任何不在列表中的文件(类型)都可以使用所需的文件名下载。 但是,当任何文件下载(PDF、ZIP、RAR、EXE 等)时……似乎它会像永远一样持续加载……我什至看不到 POSTMAN、inspector、firebug 等发送的任何请求。
如果我注释掉:
//response.setHeader("Content-Disposition:", "attachment;filename=\"" + file.getName() + "\"");
它可以工作,但文件名将设置为请求映射的名称。在这种情况下是“下载”。
我见过很多使用“Content-Disposition”标头来更改附件文件名的示例...但似乎在这些文件类型上失败了。
我还没有配置,这有点奇怪,因为在我搜索的大多数示例中......这应该正在运行或工作。
TIA
【问题讨论】:
标签: spring-boot download spring-restcontroller spring-rest