【问题标题】:zip file compression ratio is 0 [closed]zip文件压缩比为0 [关闭]
【发布时间】:2020-10-05 13:07:51
【问题描述】:

我有一个网页,最终用户可以选择和下载文件作为 zip 存档(这是 NFS 服务器文件)。我正在使用 Perl 作为后端。

使用 Perl zip Archive 库的 addFile,将 zip 文件写入套接字

 $zip->addFile(DSNFS::check_obj_path("$Main::nfsMntDir/$origfile", $Main::nfs_server), $zipfilename);

 my $fh = *STDOUT;
if ($zip->writeToFileHandle($fh,0) != Archive::Zip::AZ_OK) {
 Log::Msg("NFS", 20, "Unable to write to file Handle");
 }

下载 zip 文件后,最终用户无法提取 zip 文件。如果我们检查压缩比,它显示为零。

谁能帮我解决这个问题,并说明发生这种情况的一些原因?

【问题讨论】:

  • 压缩比为 0 并不罕见。某些文件不能很好地压缩。例如,如果您尝试将 zip 文件放入 zip 文件中,您很可能不会得到任何进一步的压缩。
  • 请提供一个最小的、可运行的问题演示。 (见minimal reproducible example。)
  • 您正在将“二进制”数据写入 STDOUT,但您没有使用 binmode(STDOUT);。这在 unixy 系统上可能不会有什么不同,但在 Windows 上肯定会。

标签: perl zip compression nfs


【解决方案1】:

有几种可能性。

首先,您正在写入缓冲文件句柄,即 STDOUT。那个设置是自动刷新吗?如果不是,您可能无法将所有数据写入到 seocket。

use IO::Handle; 
STDOUT->autoflush(1); 

下一步 - 当您通过写入 STDOUT 创建 zip 文件时,它将以流模式创建。这使得 zip 文件的结构与标准 zip 文件略有不同。

大多数程序都可以处理流式 zip 文件,因此这取决于您使用什么来解压缩文件。

你能发布不成功提取的输出吗?

另外,请针对下载的文件之一发布运行“unzip -t”的输出。

【讨论】:

  • tom@ubuntu:/tmp$ unzip -t file.zip 存档:file.zip 测试:computer.docx 的应用程序错误:要膨胀的压缩数据无效 在 file.zip 中检测到至少一个错误.
  • 我的设置在自动刷新上运行
  • 这有帮助吗? ibm.com/support/pages/…
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-07-20
  • 1970-01-01
  • 2014-04-19
  • 1970-01-01
相关资源
最近更新 更多