可以使用Perl流式传输压缩数据流

时间:2011-08-09 17:25:15

标签: linux perl cgi

我正在尝试从perl cgi脚本发送压缩的tarball。一切都运行正常,除了tarball只是在压缩和创建后发送的事实。换句话说,它不是实时“流式传输”数据,这是非常有问题的,因为数据非常大。

print "Content-Type:application/x-download\n"; 
print "Content-Disposition:attachment;filename=download.tar.\n\n";
print `tar zc $path/$file`

我也试过写tar zcf - $path/$file写入stdout并且做同样的事情。

2 个答案:

答案 0 :(得分:2)

Geo指出,你正在等待tar完成。从管道读取也应该与其创建并行输出数据:

open my $pipe_fh, '-|', "tar zc $path/$file" or die;
while(<$pipe_fh>) {
    print;
}

答案 1 :(得分:1)

好吧,在反引号的情况下,你几乎等待进程完成,然后你发送它的输出。我会向IPC::Open家人提出一些建议。 IPC::Open3可以做到这一点。