Как заставить контроллер Spring загружать файл из Ajax-вызова, если файл не находится в файловой системе сервера? - PullRequest
0 голосов
/ 30 мая 2019

У меня есть HTML-страница с такой формой ввода:

<form class="form_input" th:action="@{/upload}" method="POST" enctype="multipart/form-data">
  <input type="file" name="file" id="file"
               accept="application/vnd.openxmlformats-officedocument.spreadsheetml.sheet, application/vnd.ms-excel">
  <p id="text">Drag and drop the file!</p>
  <button id="button_export" class="button_export" type="submit" onclick="hideMain()">Start export</button>
</form>

Этим я вызываю контроллер Spring, который выполняет некоторые вычисления с использованием входных данных MS-Excel и создаю еще один из этого файла в виде байтового массива, поскольку я не хочусохраните файл в файловой системе сервера.Если я вызываю этот метод из формы ввода, новый файл автоматически загружается, как я ожидаю.Пока выполняется вычисление, я отображаю загрузочный счетчик, но я должен скрыть его, когда файл создан, и контроллер предлагает его загрузить.И это моя проблема.Я не могу спрятать прядильщик.Вот контроллер:

@PostMapping(value = "/upload", produces = "application/vnd.ms-excel")
@ResponseBody public ResponseEntity < InputStreamResource > handleFileUpload(@RequestParam("file") MultipartFile multipartFile) {

  try {
    byte[] out = excelService.createXlsFromParsedData(excelService.parseDataFromXls(multipartFile.getInputStream()));

    return new ResponseEntity < > (new InputStreamResource(new ByteArrayInputStream(out)), createHttpHeaders(multipartFile.getOriginalFilename()), HttpStatus.OK);

  } catch (IOException e) {
    logger.error(e.getMessage(), e);
  }

  return null;
}

private HttpHeaders createHttpHeaders(String name) {
  HttpHeaders headers = new HttpHeaders();
  headers.set("Content-disposition", "attachment; filename=\"SomeName_" + name);
  return headers;
}

Я не могу скрыть загрузчик после загрузки, потому что js не знает, когда следует скрыть.Если я вызываю этот контроллер с помощью кнопки «Начать экспорт» и Ajax, вычисления выполняются и файл экспорта создается, но загрузка не происходит.У вас есть идеи для этой проблемы?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...