У меня есть 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, вычисления выполняются и файл экспорта создается, но загрузка не происходит.У вас есть идеи для этой проблемы?