我尝试使用Zip4j生成一个zip文件供下载。但我总是得到错误:
public void EmployeeEncyrptedZipFileDownload(HttpServletResponse response, @RequestParam(value = "id", required = true) int employeeId) throws IOException, ZipException
{
//Prepare text file contents
String fileContent = "Hallo Welt";
response.setContentType("application/zip");
response.setHeader("Content-Disposition", "attachment;filename=test.zip");
final StringBuilder sb = new StringBuilder(fileContent);
final ZipOutputStream zout = new ZipOutputStream(response.getOutputStream());
File file = new File("mytext.txt");
zout.putNextEntry(file, null);
byte[] data = sb.toString().getBytes();
zout.write(data, 0, data.length);
zout.closeEntry();
zout.finish();
}
那是因为,这条线
zout.putNextEntry(file, null);
由于参数为null而引发一个null指针。而且,由于我没有看到servlet的其余部分,我猜测servlet可能正在尝试再次获取outputstream来处理/抛出这个异常。
上述putNextEntry()调用中的第二个参数是zipParameters。正如名称所描述的,这个参数指定各种zip参数,例如,如果zip是密码保护的,或者zip的内容是从文件或输入流中读取的,等等。这是一个必需的参数。
这个调用的第一个参数是File对象。只有在从本地文件流构建zip时才需要这样做。如果您正在从外部流构建一个zip(例如在您的案例中),则该参数可以为NULL。我知道这不是一个好的设计,将在即将发布的版本中修复。
您的方案的修复程序是:
public void EmployeeEncyrptedZipFileDownload(HttpServletResponse response, @RequestParam(value = "id", required = true) int employeeId) throws IOException, ZipException
{
//Prepare text file contents
String fileContent = "Hallo Welt";
response.setContentType("application/zip");
response.setHeader("Content-Disposition", "attachment;filename=test.zip");
final StringBuilder sb = new StringBuilder(fileContent);
final ZipOutputStream zout = new ZipOutputStream(response.getOutputStream());
ZipParameters zipParameters = new ZipParameters();
zipParameters.setSourceExternalStream(true);
zipParameters.setFileNameInZip("mytext.txt");
zout.putNextEntry(null, zipParameters);
byte[] data = sb.toString().getBytes();
zout.write(data, 0, data.length);
zout.closeEntry();
zout.finish();
}
问题内容: 我想创建受密码保护的ZIP: 但这只是加密zip中的文件,但我可以打开此zip并查看其中的文件 问题答案: 由于专利问题,Zip4j不支持文件列表的加密。 参见:http : //www.lingala.net/zip4j/forum/index.php?topic=104.0 更新: 如链接中所述。zip规范不包括文件列表的加密。要隐藏文件名,您可以创建一个zip文件,其中包含您的文
问题内容: 是否可以制作一个zip存档并提供下载,但仍不将文件保存到硬盘驱动器? 问题答案: 要触发下载,你需要设置标题: 如果你不想将文件放在磁盘上,则需要使用 你也可以选择设置标头:
我正在使用java创建一个zip文件,但我无法得到任何代码工作。我尝试了很多特定于Java7和Java8的方法,但所有的方法都显示出某种错误,是我的代码中有错误还是需要改进? 在这一行出现错误 请指导我:) 运行时出错:
问题内容: 如何在Django中为用户提供动态生成的ZIP存档? 我正在建立一个站点,用户可以在其中选择可用书籍的任意组合,并将其下载为ZIP存档。我担心为每个请求生成这样的存档会降低我的服务器的爬网速度。我还听说Django当前没有很好的解决方案来提供动态生成的文件。 问题答案: 解决方法如下。 使用Python模块zipfile创建zip存档,但是在文件中指定StringIO对象(ZipFil
问题内容: 我正在尝试使用密码保护解压缩zip文件。我知道有一个名为“ zip4j”的Java库可以为我提供帮助。但是我无法打开zip4j网站来查看教程。 我已经用另一个镜像下载了zip4j库,但是我不知道如何使用它。有没有人可以粘贴使用zip4j解压缩密码保护zip文件的示例代码? zip4j网站 非常感谢! 问题答案: 请尝试以下操作,并确保您使用的是最新的Zip4j库(1.3.1):
ZIP4J 是一个开源的 Java 处理 zip 压缩文件的开发包。 主要特性: Create, Add, Extract, Update, Remove files from a Zip file Read/Write password protected Zip files Supports AES 128/256 Encryption Supports Standard Zip Encryp