首页 > 解决方案 > 控制器在浏览器中打开文件而不是下载它

问题描述

我创建了一个控制器来下载文件,它适用于小文件,但对于较大的文件而不是下载,它只是在浏览器中打开文件(下载了 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();
        }
    }

标签: javaspringhttp

解决方案


您正在使用无效的内容类型。要发送浏览器必须将其视为文件(二进制)的二进制数据,您必须使用application/octet-stream

检查媒体类型列表以获取 HTTP 协议的有效内容类型的完整列表


推荐阅读