У меня есть серверная часть на Java Spring, которая использует Apache POI, создающую рабочую книгу
@Override
public byte[] getRegistryEKassirFormat(ExcelWriterFormat excelWriter, Application application) throws E_RegistryInternalFailureException, ExecutionException, InterruptedException, IOException {
Workbook workbook = writeDownToExcelFile(excelWriter, application);
ByteArrayOutputStream bos = new ByteArrayOutputStream();
try {
workbook.write(bos);
} catch (IOException e) {
} finally {
try {
bos.close();
workbook.close();
} catch (IOException e) {
}
}
return bos.toByteArray();
}
После отправки клиенту в качестве ответа
@PostMapping(value = "/registry/download")
@ResponseBody ResponseEntity<byte[]> getExcelFileByFormat(
@RequestBody Application application,
@RequestParam ExcelWriterFormat excelWriterFormat,
OutputStream outputStream
) throws WriteException, ExecutionException, E_RegistryInternalFailureException, InterruptedException, IOException {
byte[] bytes = registryService.getRegistryEKassirFormat(excelWriterFormat, application);
return ResponseEntity.ok()
.header(HttpHeaders.CONTENT_DISPOSITION, "attachment;filename=Registry-" + excelWriterFormat.toString() + "-ofApp" + application.getId()+ ".xls")
.contentType(MediaType.valueOf("application/vnd.ms-excel"))
.contentLength(bytes.length)
.body(bytes);
}
На стороне клиента для получения данных используется блоби преобразовать его, создаст объект href, и он загрузит
response.blob({type: 'application/vnd.ms-excel'}).then(blob => {
let url = window.URL.createObjectURL(blob, {type: 'application/vnd.ms-excel'});
let a = document.createElement('a');
a.href = url;
a.download = filename;
document.body.appendChild(a);
a.click();
document.body.removeChild(a);
}).catch(error => {
console.log(error)
message.error(ERROR);
// }
});
} catch (error) {
console.log(error)
message.error(ERROR);
}
Все отлично работает и загрузка файлов с тем форматом, который нам нужен. Но когда другая клиентская сторона использует этот загружаемый файл, она отправляет собственной службе в виде формы / данных и выдает ошибку
Добавить платеж (ы) из файла Не удалось проанализировать данные платежа из файла 'C: \ inetpub \ importer \ Content \ Uploads \ testsheet% 20 (3) _2aba9c69-e798-402c-b20f-62f63d98de89.xls' (EX: ссылка на объект не установлена на экземпляр объекта.) 2019-10-2110: 40: 03.4657 |Ошибка |Importer.Site.Filters.ImporterExceptionFilter |184 |System.Exception: не удалось проанализировать данные платежа из файла 'C: \ inetpub \ importer \ Content \ Uploads \ testsheet% 20 (3) _2aba9c69-e798-402c-b20f-62f63d98de89.xls' в Kcell.Importer.CoreImporter.GetPaymentFromExcelFile (Строковое имя файла) в Kcell.Importer.CoreImporter.AddPaymentFromFile (String fileName, Int32 docId, String userId) в Importer.Domain.Repository.Impl.DocumentRepository.AddPaymentsFromFile (Int32 docId, String fileName, String ProjectSpace \ in_D_D_Id: в DI: String userSace: in_D_D_Id: в DI: String userSace: in_D_D_Id: в DID: String\ Support \ Clients \ Kcell \ Importer.Web \ Importer.Domain \ Repository \ Impl \ DocumentRepository.cs: строка 111 в Importer.Site.Controllers.api.DocumentsController.d__13.MoveNext () в D: \ Workspace_VS \ Projects \ Support\ Clients \ Kcell \ Importer.Web \ Importer.Site \ Controllers \ api \ DocumentsController.cs: строка 88 - Конец трассировки стека из предыдущего местоположения, в котором было сгенерировано исключение - в System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw () .. .
Второй клиент не наш сервис, и я не могу посмотреть и изменить его кодвыше своего журнала. Как я знаю, этот сервис написан на .NET
Я не знаю, почему это происходит, пытался работать с форматом файла Excel, все показывает эту ошибку
Буду рад любой попытке попробовать