java - 控制器在浏览器中打开文件而不是下载它
问题描述
我创建了一个控制器来下载文件,它适用于小文件,但对于较大的文件而不是下载,它只是在浏览器中打开文件(下载了 2kB 文件,但打开了 12kB)。我知道从控制器下载文件的不同选项,但我想知道我的代码中问题的根本原因是什么。
我的控制器:
@GetMapping("/logs/getfile")
public void getFile(@RequestParam String logFile,HttpServletResponse response) {
try {
String directory = "C:\\Users\\user\\Documents\\";
InputStream is=new FileInputStream(new File(directory+logFile));
IOUtils.copy(is, response.getOutputStream());
response.setContentType("application/force-download");
response.addHeader("Content-Disposition", "attachment; filename="+logFile);
response.flushBuffer();
}catch(IOException ex) {
ex.printStackTrace();
}
}
解决方案
您正在使用无效的内容类型。要发送浏览器必须将其视为文件(二进制)的二进制数据,您必须使用application/octet-stream
检查媒体类型列表以获取 HTTP 协议的有效内容类型的完整列表
推荐阅读
- neo4j - 如果第二部分不起作用,Cypher 查询不会返回任何内容
- dart - 我无法在颤动中对特定的 url 进行 REST api 调用
- fortran - 如何知道 Fortran 中带有尾随空格的用户输入的长度?
- javascript - 代码只在第一次运行良好,之后它崩溃(DOM)
- c - 自动完成 unix 函数原型
- c# - 如何将文件动态添加到存储在 Azure Blob 存储中的 zip 存档?
- python - 找到我的鼠标位置。帮我
- java - 将 JSTL jar 包安装到 JSP 项目中
- google-maps - 谷歌街景是黑暗的(即使在官方服务网址上)
- javascript - 使 fontFamily cssproperty 单引号