使用Perl的Archive::Zip模块addString方法添加大文件后生成的Zip文件无法打开的问题求助
使用Perl的Archive::Zip模块addString方法添加大文件后生成的Zip文件无法打开的问题求助
大家好,我最近碰到了一个Perl处理Zip打包的棘手问题,想请各位大佬帮忙看看。
我做了一个Perl系统,负责解析邮件,把邮件内容转成JSON文件、分离出附件,最后用Archive::Zip把这些文件打包成Zip包。小文件处理起来完全没问题,但一旦附件大小超过大概10MB,生成的Zip包就失效了——在Windows里显示的大小明显不对,而且根本打不开、没法解压。
我的核心代码是这样的:
my $zip = Archive::Zip->new(); $count = 0; foreach $attachment (@atachments) { my $member = $zip->addString(@attachments[$count], @attachment_names[$count]) $member->desiredCompressionMethod( COMPRESSION_STORED ); $count++; } my $jsonMember = $zip->addString($json, $fn . '.json') $jsonMember->desiredCompressionMethod( COMPRESSION_STORED ); unless ( $zip->writeToFileNamed($out) == AZ_OK ) { die 'zip error'; }
注:代码里的@atachments看起来是拼写笔误,实际应该是@attachments
我已经尝试过这些办法,但都没解决问题:
- 把Archive::Zip升级到了1.68版本,情况依旧
- 试过调整不同的压缩级别,没用
- 确认过要添加的字符串本身是完整的,所有内容都在
现在我有几个疑问想请教:
- 会不会是
addString方法本身存在字符串大小限制? - 有没有可能文件大小触发了不同的Zip类型?我查过Zip64的相关内容,但它是针对4GB以上文件的,我这才10MB,应该不沾边吧?
希望有大佬能给我点思路,万分感谢!
备注:内容来源于stack exchange,提问作者BM100
相关产品推荐
相关产品推荐

