Контроллер открывает файл в браузере, а не загружает его - PullRequest
0 голосов
/ 17 января 2020

Я создал контроллер для загрузки файла, он отлично работает для небольших файлов, но для больших файлов вместо загрузки он просто открывает файл в браузере (файл 2 КБ был загружен, но 12 КБ открыт). Мне известны различные варианты загрузки файла с контроллера, но я хотел бы знать, что является причиной root проблемы в моем коде.

Мой контроллер:

    @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();
        }
    }

Ответы [ 2 ]

0 голосов
/ 20 января 2020

Удаление response.flushBuffer(); исправило мою проблему.

0 голосов
/ 17 января 2020

Вы используете недопустимый тип контента. Чтобы отправить двоичные данные, которые браузер должен рассматривать как файл (двоичный файл), вы должны использовать application/octet-stream

Проверьте список типов мультимедиа для получения полного списка допустимых типов содержимого для протокола HTTP

...