我正在使用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);
........
我计划进行的一些更改是:
查看了主题http://www.lingala.net/zip4j/forum/index.php?topic=434.msg1297#msg1297,但这适用于AES加密,这里我使用的是ENC_METHOD_STANDARD,因此我认为这并不适用。
有什么想法吗?