#angular #spring-boot #httpresponse
#angular #spring-boot #httpresponse
Вопрос:
В HTTP-сообщении я должен вернуть документ PDF. Я тестирую его с помощью postman, и он работает нормально. Когда я пытаюсь использовать его в своем приложении Angular, я получаю эту ошибку (публикуется в виде картинки по причинам форматирования):
Итак, что-то не так с моим ответом, но я не могу найти ошибку.
Где создается ответ:
public ResponseEntity<byte[]> compareWithLocal(CompareJob compareJob) {
logger.info(compareJob);
File leftFile = compareJob.getFile1();
File rightFile = compareJob.getFile2();
byte[] document = null;
HttpHeaders header = new HttpHeaders();
try {
final CompareResult result = new PdfComparator(leftFile, rightFile, new CompareResultWithPageOverflow()).compare();
if (result.isEqual()) {
logger.info("Compare job is: equal");
} else {
String path = System.getProperty("java.io.tmpdir");
System.out.println("File written to: " path);
result.writeTo(path "demo");
compareJob.setCompareResultFile(new File(path "demo.pdf"));
// TODO: Delete temp
logger.info("Compared file path: " compareJob.getCompareResultFile());
document = FileCopyUtils.copyToByteArray(compareJob.getCompareResultFile());
header.setContentType(new MediaType("application", "pdf"));
header.set("Content-Disposition", "inline; filename=" compareJob.getCompareResultFile().getName());
header.setContentLength(document.length);
logger.info(document);
}
} catch (IOException e) {
e.printStackTrace();
}
return new ResponseEntity<byte[]>(document, header, HttpStatus.OK);
}
Где вызывается метод для создания ответа:
@PostMapping("/pdfdiffLocal")
ResponseEntity<byte[]> pdfDiffLocal(@RequestParam("file1") MultipartFile file1, @RequestParam("file2") MultipartFile file2) {
logger.info("Received File 1: " file1.getOriginalFilename() ", File 2: " file2.getOriginalFilename());
PdfDiffCompare pdfDiffCompare = new PdfDiffCompare();
File converted1 = convert(file1);
logger.info("File 1: " converted1);
File converted2 = convert(file2);
logger.info("File 2: " converted2);
CompareJob compareJob = new CompareJob(converted1, converted2);
logger.info("Compare Job after convert. F1: " compareJob.getFile1() " F2: " compareJob.getFile2());
ResponseEntity<byte[]> returnComparison = pdfDiffCompare.compareWithLocal(compareJob);
logger.info(returnComparison);
return returnComparison;
}
Это то, что я регистрирую в ResponseEntity:
<200 OK OK,[B@50fdfe86,{Content-Type=[application/pdf], Content-Disposition=[inline; filename=demo.pdf], Content-Length=[838078]}>
Угловая часть, где я вызываю серверную часть:
comparePdfDiff() {
console.log('Submitted PDF Diff');
let formModel = this.prepareSave();
this.loading = true;
console.log('Formmodel: ', formModel);
this.http.post('http://localhost:8080/pdfdiffLocal', formModel)
.subscribe((response: ApiResponseModel) => {
console.log('response: ', response);
this.router.navigate(['/pdfdiff']);
let returnValue = JSON.stringify(response);
console.log('parsed: ', returnValue);
this.comparejobdataService.pdfFile.push(response.pdfFile);
});
setTimeout(() => {
this.loading = false;
}, 10000);
}
Спасибо за любую помощь!
Комментарии:
1. Можете ли вы поделиться кодом, который вы используете для достижения конечной точки из angular?
2. Вы используете angular на Apache? проверьте, что возвращает ваш веб-сервер, возможно, ваш веб-сервер не преобразует тип контента, как ожидалось. Проверьте конфигурацию веб-сервера.
3. Я добавил свой код angular, в котором я вызываю серверную часть. Спасибо за вашу помощь!