Java ZipOutputStream выдает ответ, но загрузка сама по себе не происходит - PullRequest
0 голосов
/ 19 марта 2019

Я играю с загрузкой 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 ответ от бэкэнда, и в браузере я вижу, что ответ был сгенерирован, но по какой-то причине ничего не происходит, загрузка не происходит.

...