Моя цель - отправить клиенту файл Excel (.xlsx) и загрузить файл Excel. Ниже приведен мой код на стороне сервера, который возвращает ResponseEntity.
@PostMapping(value = "/proccessFile")
public ResponseEntity<Resource> processFileAndDownload(@RequestBody String sheetName) throws FileNotFoundException, IOException
{
try
{
//some logic applied to the file CollibraOutputTemplateDataAttrName and the file is a saved in a tmp folder
collibraAutomationScript.processingFiles(sheetName);
//preparing CollibraOutputTemplateDataAttrName.xlsx for download
File file=new File("tmp/CollibraOutputTemplateDataAttrName.xlsx");
Path path = Paths.get(file.getAbsolutePath());
byte[] data = Files.readAllBytes(path);
ByteArrayResource resource = new ByteArrayResource(data);
HttpHeaders headers = new HttpHeaders();
headers.add(HttpHeaders.CONTENT_DISPOSITION, "attachment;filename="+ file.getName());
return ResponseEntity.ok()
.headers(headers)
.contentLength(file.length())
.contentType(MediaType.parseMediaType("application/octet-stream"))
.body(resource);
}catch (Exception e) {
// TODO: handle exception
}
return null;
}
Код Ajax ниже:
$.ajax({
type: "POST",
enctype: 'application/json',
url: 'http://localhost:8080/proccessFile',
data: nameOfSheet,
processData: false,
contentType: false,
success: function (response) {
var data = new Blob([response], {type: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet'});
var link=document.createElement('a');
link.href = window.URL.createObjectURL(data);
link.download='CollibraOutputTemplateDataAttrName.xlsx'
link.click();
},
error: function (error) {
console.log(error);
// process error
}
});
Файл загружается, но когда я пытаюсь его открыть, он сообщает, что «Рабочая книга не может быть открыта или отремонтирована в Microsoft Excel, потому что она повреждена». Я пробовал различные решения, представленные в stackoverflow, обновляя эту проблему, но ничего не помогло.
В этом же коде я даю тип: 'text / plain' и отправляю текстовый файл с сервера, он работает отлично, загруженный текстовый файл не поврежден. Не понимаете, в чем проблема с файлами Excel?