如何使用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感兴趣 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |