我正在尝试从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并且做同样的事情。
答案 0 :(得分:2)
Geo指出,你正在等待tar
完成。从管道读取也应该与其创建并行输出数据:
open my $pipe_fh, '-|', "tar zc $path/$file" or die;
while(<$pipe_fh>) {
print;
}
答案 1 :(得分:1)
好吧,在反引号的情况下,你几乎等待进程完成,然后你发送它的输出。我会向IPC::Open
家人提出一些建议。 IPC::Open3可以做到这一点。