【问题标题】:Controller opens file in the browser instead of downloading it控制器在浏览器中打开文件而不是下载它
【发布时间】:2020-05-04 13:51:28
【问题描述】:

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

【问题讨论】:

    标签: java spring http downloadfile


    【解决方案1】:

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

    查看list of media-types 以获取 HTTP 协议的有效内容类型的完整列表

    【讨论】:

    • 我已经试过了,它不能解决问题,也不能解释原因。
    • @wisnix 我尝试在不进行任何更改的情况下运行您的代码,它对我有用。文件已下载。我认为这可能与浏览器配置有关。你在用 Chrome 吗?请检查这两个帖子 addictivetips.com/web/… 和 presentermedia.com/blog/2013/10/… 。可以试试其他浏览器吗?
    • 它在 Firefox、Edge、Eclipse 和 Chrome 中的作用相同,所以我认为这不是浏览器问题。
    【解决方案2】:

    删除response.flushBuffer(); 解决了我的问题。

    【讨论】:

      猜你喜欢
      • 2011-06-19
      • 2013-10-25
      • 1970-01-01
      • 1970-01-01
      • 2013-04-13
      • 1970-01-01
      • 2011-11-08
      • 2012-08-18
      相关资源
      最近更新 更多