加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

如何使用mod_perl和CGI :: Application提供临时文件下载?

发布时间:2020-12-15 21:47:36 所属栏目:大数据 来源:网络整理
导读:我的网络应用程序使用CGI :: Application在Apache mod_perl上运行.我想提供生成文件的下载.在过去(在我们使用mod_perl和CGI :: App之前)我只是在生成时将一个csv文件假脱机到STDOUT.现在我正在进行一些改进 – 使用Spreadsheet :: WriteExcel创建一个Excel电
我的网络应用程序使用CGI :: Application在Apache mod_perl上运行.我想提供生成文件的下载.在过去(在我们使用mod_perl和CGI :: App之前)我只是在生成时将一个csv文件假脱机到STDOUT.现在我正在进行一些改进 – 使用Spreadsheet :: WriteExcel创建一个Excel电子表格 – 我似乎无法从文件句柄中打印出来.
sub export_list {
  my $self = shift;

  binmode(STDOUT);
  my $str;
  open my $fh,'>',$str;
  my $workbook = Spreadsheet::WriteExcel->new($fh);
  my $worksheet = $workbook->add_worksheet();

  $worksheet->write_col(0,['some','data','here']);
  warn $str;
  return $str;
}

输出只是一个空白响应,警告也是空白.

我用来将电子表格写入文件句柄的方法非常直接来自documentation,所以我认为问题是由于我的一些CGI :: App noobery.文档的文件句柄和mod_perl的建议方法也证明是徒劳的.

我想我应该提一下我在Windows上运行,而我目前的解决方法是创建一个文件并为用户提供一个链接.然而,这会带来更多问题,例如清除目录以及何时执行此操作,以及访问生成的文件的身份验证.

建议?尖刻的批评?

解决方法

你不应该搞乱STDOUT; CGI-App应该在幕后为您正确处理.在尝试发送数据之前,您可能还需要关闭文件句柄.

但是,您似乎没有为Excel数据设置正确的内容类型.对于text / html以外的任何内容,您需要手动设置它.尝试这样的事情:

sub export_list {
    my $self = shift;

    my $str;
    open my $fh,$str or die "Can't open to var: $!";
    my $workbook = Spreadsheet::WriteExcel->new($fh);
    my $worksheet = $workbook->add_worksheet();

    $worksheet->write_col(0,'here']);

    $workbook->close;
    close $fh;

    warn $str;

    $self->header_add( -type => 'application/vnd.ms-excel' );
    return $str;

}

您可能也对CGI::Application::Plugin::Stream感兴趣

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读