Perl如何将zip文件发送到浏览器以便在PSGI中下载

时间:2014-07-26 00:35:54

标签: perl psgi

我开始看PSGI,我知道应用程序的响应应该是一个数组 参考三​​个元素,[代码,标题,正文]:

#!/usr/bin/perl

my $app = sub {
  my $env = shift;

  return [
    200,
    [ 'Content-type', 'text/plain' ],
    [ 'Hello world' ],
  ]
};

问题是如何发送文件例如zip或pdf以便下载到浏览器。

2 个答案:

答案 0 :(得分:7)

只需设置正确的标题和正文。

my $app = sub {
  my $env = shift;

  open my $zip_fh, '<', '/path/to/zip/file' or die $!;

  return [
    200,
    [ 'Content-type', 'application/zip' ], # Correct content-type
    $zip_fh, # Body can be a filehandle
  ]
};

您可能想尝试添加其他标题(特别是“内容处置”)。

答案 1 :(得分:2)

看看perl dancer;它有psgi支持,是一个非常轻量级的框架。

示例:

 #!/usr/bin/env perl
 use Dancer;

 get '/' => sub {
     return send_file('/home/someone/foo.zip', system_path => 1);
 };

 dance;

运行 chmod 0755 ./path/to/file.pl; ./path/to/file.pl

致电:

wget <host>:<port>/