java - 如何在 Spring MVC 中将字节数组转换为 ZipOutputStream?

标签 java spring spring-mvc zipoutputstream zipinputstream

尝试读取以字节数组形式存储在数据库中的 zip 文件。

使用以下代码下载

.zip,但 zip 中包含的文件大小为零。没有数据。

我已经浏览了很多答案,但不确定以下代码有什么问题。

请帮忙。

@RequestMapping(value = ApplicationConstants.ServiceURLS.TRANSLATIONS + "/{resourceId}/attachments", produces = "application/zip")
    public void attachments(HttpServletResponse response, @PathVariable("resourceId") Long resourceId) throws IOException {

        TtTranslationCollection tr = translationManagementDAO.getTranslationCollection(resourceId);
        byte[] fileData = tr.getFile();

        // setting headers
        response.setStatus(HttpServletResponse.SC_OK);
        response.addHeader("Content-Disposition", "attachment; filename=\"attachements.zip\"");

        ZipOutputStream zipOutputStream = new ZipOutputStream(response.getOutputStream());

        ZipInputStream zipStream = new ZipInputStream(new ByteArrayInputStream(fileData));
        ZipEntry ent = null;
        while ((ent = zipStream.getNextEntry()) != null) {
            zipOutputStream.putNextEntry(ent);
        }
        zipStream.close();
        zipOutputStream.close();
    }

最佳答案

您还必须将 zip 文件的字节数据(内容)复制到输出中...

这应该有效(未经测试):

while ((ent = zipStream.getNextEntry()) != null) {
    zipOutputStream.putNextEntry(ent);
    // copy byte stream
    org.apache.commons.io.IOUtils.copy(zis.getInputStream(ent), zipOutputStream);
}

顺便说一句:为什么你不简单地转发原始 zip 字节内容?

try (InputStream is = new ByteArrayInputStream(fileData));) {
    IOUtils.copy(is, response.getOutputStream());
}

甚至更好(感谢 @M. Deinum 的评论)

IOUtils.copy(fileData, response.getOutputStream());

关于java - 如何在 Spring MVC 中将字节数组转换为 ZipOutputStream?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56666785/

相关文章:

java Swing 应用程序在调用 jpcapCaptor.openDevice 方法时卡住

升级到新计算机后所有程序出现 Java.Lang.IllegalAccessError

java - Spring上下文初始化失败

java - 私有(private)成员访问 Java

java - Hibernate 未在内存数据库中使用 H2 创建表

Spring webflux : how to send Mono<T> in response body with body inserters

java - Spring MVC 项目上的“缺少 Artifact ”和 'Failed to read artifact descriptor' 错误

java - 如何使用多个 Controller 或如何正确使用 Apache Tiles?

java -/j_spring_security_check HTTP错误404

java - 收集java流中字段的总和