Скачать файл XML с загрузкой Spring - PullRequest
0 голосов
/ 12 апреля 2019

Я пытаюсь загрузить файлы с помощью интерфейса React, но метод в контроллере не загружает его

Метод работает, потому что он не запускает никаких исключений и работает байтовый массив,но когда я закрываю потоки, загрузка не происходит

public void downloadFile(@PathVariable("numeroOfferta") String numeroOfferta, @RequestParam(value="file") String file, HttpServletResponse response, HttpServletRequest req) throws IOException {


    String filePathToBeServed = 
    File fileToDownload = new File(filePathToBeServed + file);

    response.setContentType("application/octet-stream");
    response.setHeader("Content-Disposition", "attachment;filename="+file);
    response.setStatus(HttpServletResponse.SC_OK);

    try(FileInputStream in =  new FileInputStream(fileToDownload);
            OutputStream out = response.getOutputStream()) {

        byte[] buffer = new byte[4096];

        while ((in.read(buffer, 0, 4096)) != -1) {
            out.write(buffer, 0, 4096);
        }
        out.flush();
        out.close();
        in.close();
    }

NumeroOfferta - это просто строка, которая мне нужна для перехода в папки, и файл содержит имя файла, который я отправляю с веб-страницы.

Я не могу понять, почему он не загружает файл, который я выбрал, несмотря на то, что метод работает.Спасибо за каждый ответ

1 Ответ

0 голосов
/ 12 апреля 2019

Просто используйте Spring MVC ResponseEntity:

public void downloadFile(@PathVariable("numeroOfferta") String numeroOfferta, 
                         @RequestParam(value="file") String file) {

    HttpHeaders headers = new HttpHeaders();
    headers.setContentType(MediaType.APPLICATION_OCTET_STREAM);
    headers.setContentDispositionFormData(file, file);
    headers.setCacheControl("must-revalidate, post-check=0, pre-check=0");

    byte[] content = Files.readAllBytes(new File(filePathToBeServed + file).toPath());
    return new ResponseEntity(content, headers, HttpStatus.OK);

}

Вот и все.

...