当前位置: 首页 > 知识库问答 >
问题:

创建zip响应而不实际创建计算机中的所有文件

虞裕
2023-03-14

我的程序中的主要endpoint处理大量数据,并最终创建Zip文件,其中包含具有几个子目录的父目录和几个文件(在子目录之间拆分)。将zip发送回客户端后,将删除在该过程中创建的所有内容,因为只有创建这些内容的作业才能启动zip文件。主要目标是将zip文件作为响应发送给用户。

性能而言,有没有一种方法可以在不实际创建文件夹的情况下执行此逻辑

共有1个答案

葛承教
2023-03-14

是的,你可以做得更好。你可以完全在内存中操作,而不是在硬盘上操作物理数据。

正如@Olivier在评论部分提到的,您需要一个输出流。

例如,您有一个返回<代码>的控制器。txt压缩文件:

@PostMapping(value = "/zip", produces = "application/zip")
public ResponseEntity<StreamingResponseBody> zip() {
    return ResponseEntity
        .ok()//
        .header("Content-Disposition", "attachment; filename=\"my.zip\"")//
        .body(out -> generateZip(out));
}

要在给定的OutPutStream上生成zip文件以响应内存中的数据:

public void generateZip(OutputStream outPutStream) {
    String data = "Test data \n123\n456";
    String fileNameInZip = "abc.txt";
    try (ZipOutputStream zipOutput = new ZipOutputStream(outPutStream)) {
        ZipEntry zipEntry = new ZipEntry(fileNameInZip);
            zos.putNextEntry(zipEntry);

            ByteArrayInputStream bais = new ByteArrayInputStream(data.getBytes());
            // one line, able to handle large size?
            //zos.write(bais.readAllBytes());

            // play safe
            byte[] buffer = new byte[1024];
            int len;
            while ((len = bais.read(buffer)) > 0) {
                zos.write(buffer, 0, len);
            }

            zos.closeEntry();
    }
}

当然,这个generateZip函数只是演示压缩操作并将其写入输出流的一个示例。

您需要在generateZip中实现逻辑

您可以在此处阅读更多关于压缩操作的信息,例如一个文件中的多个文件压缩等。

 类似资料:
  • 问题内容: 我正在尝试将 文件 从 一个文件夹 保存到 另一个 文件夹 。 zip文件夹 放置在其他目录中。而且我编写了以下代码: archive.php 但是可惜我无法创建.zip文件夹。我错过了任何一步吗? 问题答案: TEST是您的项目文件夹名称。 您可以根据需要定义路径。

  • 错误信息 当我第一次运行Docker Quickstart Terminal时,我收到以下消息,机器无法创建。 创建机器出错:机器创建过程中驱动程序出错:退出状态1看起来出了问题…按任意键继续… 有人知道吗? 相关组件的版本: 泊坞工具盒-1.9.0 视窗 7 sp1 虚拟盒版本 5.0.8 r103449

  • 如何在Pharo中创建zip文件并将其写入磁盘? 同样,/也是不可用的,因为该实现只能在实际磁盘上工作,而不能在内存中工作。 那么,是否有其他方法(或外部库),我可以压缩我的数据,而不需要转储所有文件到磁盘,压缩到那里,并读取最后的文件回来?

  • 本文向大家介绍Java中创建ZIP文件的方法,包括了Java中创建ZIP文件的方法的使用技巧和注意事项,需要的朋友参考一下 java创建zip文件的代码如下如下: 补充:下面看下JAVA中创建ZIP文件,并向ZIP文件中写入并读取条目和数据 总结 以上所述是小编给大家介绍的Java中创建ZIP文件的方法,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对呐

  • 我试图在ZIP文件内创建一个ZIP文件,以重新构建以前在内存中的zip结构,我在Java。 我失败了,因为我得到了一个错误的内部ZIP内创建的初始ZIP文件。文件已损坏。当试图打开它时,我得到一个“文件的意外结局”。 我得到了这个结构: -input.zip--InnerInput.zip 代码使用java Stack和Map在内存中解压。然后它创建input2.zip,内部nput.zip。 总