无法解压缩zip4j库Java创建的zip文件

时间:2019-04-12 23:14:08

标签: java zip javamail zip4j

我正在使用Zip4j将一些字符串数据转换为受密码保护的zip文件。接下来,我通过电子邮件将此zip文件作为附件发送。 问题是有时(故障率像4%,其余96%的时间可以工作)我无法解压缩(在Mac上使用unzip命令)我在电子邮件中收到的文件,解压缩文件时收到的错误是下方:

 7 extra bytes at beginning or within zipfile
  (attempting to process anyway)
file #1:  bad zipfile offset (local header sig):  7
  (attempting to re-compensate)

error:  invalid compressed data to inflate

似乎zip文件中的正文内容并不重要,例如:第一次压缩并发送电子邮件不起作用,但是再次使用相同的内容是可行的。我无法在本地复制。

    ByteArrayOutputStream byteArrayOutputStream = new 
    ByteArrayOutputStream();
    net.lingala.zip4j.io.ZipOutputStream zipOutputStream = new 
    net.lingala.zip4j.io.ZipOutputStream(byteArrayOutputStream);

    ZipParameters parameters = new ZipParameters();
    parameters.setCompressionMethod(Zip4jConstants.COMP_DEFLATE);
  parameters.setCompressionLevel(Zip4jConstants.DEFLATE_LEVEL_NORMAL);
    parameters.setEncryptFiles(true);
    parameters.setEncryptionMethod(Zip4jConstants.ENC_METHOD_STANDARD);
    parameters.setPassword("zipFilePassword");
    parameters.setFileNameInZip(subject + ".txt");
    parameters.setSourceExternalStream(true);
    zipOutputStream.putNextEntry(null, parameters);

    zipOutputStream.write("some regular text".getBytes());
    zipOutputStream.closeEntry();
    zipOutputStream.finish();

    DataSource attachment = new 
    ByteArrayDataSource(byteArrayOutputStream.toByteArray(), 
    "text/plain");
    MimeBodyPart messageBodyPart = new MimeBodyPart();
    messageBodyPart.setDataHandler(new DataHandler(attachment));
    messageBodyPart.setFileName(subject + ".zip");

    Multipart multipart = new MimeMultipart();
    multipart.addBodyPart(messageBodyPart);
    ........

我计划进行的一些更改是:

  1. 在创建ByteArrayDataSource实例时,将mime类型设置为application / zip而不是text / plain。
  2. 由于我发送的数据很小,可能根本不使用压缩,所以请使用parameters.setCompressionMethod(Zip4jConstants.COMP_STORE);

查看了主题http://www.lingala.net/zip4j/forum/index.php?topic=434.msg1297#msg1297,但这适用于AES加密,这里我使用的是ENC_METHOD_STANDARD,因此我认为这并不适用。

有什么想法吗?

0 个答案:

没有答案