【问题标题】:Possible to stream a compressed data stream using Perl可以使用 Perl 流式传输压缩数据流
【发布时间】:2011-10-23 10:26:41
【问题描述】:

我正在尝试从 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,它做同样的事情。

【问题讨论】:

    标签: linux perl cgi


    【解决方案1】:

    正如 Geo 指出的那样,您正在等待 tar 完成。从管道中读取也应该在创建的同时输出数据:

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

    【讨论】:

      【解决方案2】:

      嗯,在反引号的情况下,您实际上是在等待该过程完成,然后您正在发送它的输出。我会建议来自IPC::Open 家族的东西。 IPC::Open3 可以解决问题。

      【讨论】:

      • 它也适用于 open2!感谢您为我指明正确的方向。
      猜你喜欢
      • 2012-02-08
      • 2013-11-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多