我有一个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调用此控制器,则计算正在运行,并且正在创建导出文件,但不会进行下载。 您对这个问题有任何想法吗?