Я играю с загрузкой zip-файла из памяти (на интерфейсе есть кнопка, по которой я создаю zip-файл на бэкэнде и возвращаю байтовый массив в качестве ответа).
Это мой контроллер:
@ResponseBody
@PostMapping(value = "/documents/zip", produces = "application/zip")
public byte[] getDocumentsAsZip(@RequestBody List<Long> docIds, HttpServletResponse response) throws IOException, DocumentException, InvoiceException, JRException {
response.setStatus(HttpServletResponse.SC_OK);
response.addHeader("Content-Disposition", "attachment; filename=\"docs.zip\"");
return documentService.generateZip(docIds);
}
А вот метод сервиса, который строит сам zip:
@Override
public byte[] generateZip(List<Long> docIds) throws IOException {
ByteArrayOutputStream outputStream = new ByteArrayOutputStream();
ZipOutputStream zipOutputStream = new ZipOutputStream(outputStream);
for (Long docId : docIds) {
Document document = findDocumentById(docId);
String fileName = generateFileName(document);
byte[] pdfFile = pdfService.generatePdfFile(document);
ZipEntry entry = new ZipEntry(fileName);
zipOutputStream.putNextEntry(entry);
zipOutputStream.write(pdfFile);
zipOutputStream.closeEntry();
}
zipOutputStream.close();
return outputStream.toByteArray();
}
И теперь, когда я нажимаю кнопку на веб-интерфейсе, я получаю 200 ответ от бэкэнда, и в браузере я вижу, что ответ был сгенерирован, но по какой-то причине ничего не происходит, загрузка не происходит.