gpt4 book ai didi

java - 在java中压缩二进制数据

转载 作者:搜寻专家 更新时间:2023-11-01 03:43:37 25 4
gpt4 key购买 nike

我正在尝试将一组二进制数据(从数据库返回的结果集)压缩到一个文件中。可以通过网络应用程序下载。以下代码用于压缩结果集并将压缩文件写入 HttpServletResponse

String outFilename = "outfile.zip";
response.setContentType("application/octet-stream");
response.setHeader("Content-Disposition", "attachment; filename= " + outFilename);
OutputStream os = response.getOutputStream();
ZipOutputStream out = new ZipOutputStream(os);
for (int i = 0; i < cardFileList.size(); i++) {

CardFile cardFile = cardFileList.get(i);
out.putNextEntry(new ZipEntry(cardFile.getBinaryFileName()));
out.write(cardFile.getBinaryFile(), 0, cardFile.getBinaryFile().length);
out.closeEntry();
}
// Complete the ZIP file
out.flush();
out.close();
os.close();

问题是在使用 WinRar 解压缩下载的 zip 文件时出现以下错误:

File Path: Either multipart or corrupt ZIP archive

谁能指出我哪里出错了?。任何帮助将不胜感激。

[编辑] 我尝试了 response.setContentType("application/zip"); 但结果相同。

最佳答案

以下代码适用于我:

FileOutputStream os = new FileOutputStream("out.zip");
ZipOutputStream zos = new ZipOutputStream(os);
try
{
for (int i = 1; i <= 5; i++)
{
ZipEntry curEntry = new ZipEntry("file" + i + ".txt");
zos.putNextEntry(curEntry);
zos.write(("Good morning " + i).getBytes("UTF-8"));
}
}
finally
{
zos.close();
}

使用此代码生成的 Zip 文件可以毫无问题地使用 7-zip 打开。

  • 检查 servlet 的响应实际上不是 404 或 500 错误页面。选择一个小回复并使用十六进制编辑器甚至文本编辑器将其打开。 Zip 文件以“PK”魔数(Magic Number)开头,即使在文本编辑器中也应该可见。
  • 对于初学者,尝试保存到文件而不是 servlet 输出流,看看这是否有所不同。
  • 是否有过滤器修改您的 servlet 的输出/损坏 ZIP?

关于java - 在java中压缩二进制数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8426441/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com