我的程序中的主要endpoint处理大量数据,并最终创建Zip文件,其中包含具有几个子目录的父目录和几个文件(在子目录之间拆分)。将zip发送回客户端后,将删除在该过程中创建的所有内容,因为只有创建这些内容的作业才能启动zip文件。主要目标是将zip文件作为响应发送给用户。
就性能而言,有没有一种方法可以在不实际创建文件夹的情况下执行此逻辑
是的,你可以做得更好。你可以完全在内存中操作,而不是在硬盘上操作物理数据。
正如@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。 总