我的網絡應用程序使用CGI :: Application在Apache mod_perl
上運行。我想提供生成文件的下載。在過去(在我們使用mod_perl
和CGI :: App之前),我只是將一個csv文件假脫機生成STDOUT
。現在我正在拍攝一些細節 - 使用Spreadsheet :: WriteExcel創建一個Excel電子表格 - 我似乎無法從文件句柄中打印出來。如何使用mod_perl和CGI :: Application提供臨時文件下載?
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,0, ['some','data','here']);
warn $str;
return $str;
}
輸出只是一個空白的響應,警告也是空白的。
我用來將電子表格寫入文件句柄的方法與documentation差不多,所以我認爲這個問題是由於我的CGI :: App noobery。該文檔建議的文件句柄方法和mod_perl
也證明了相當無果。
我想我應該提到我在Windows上運行,而且我目前的解決方法是創建一個文件併爲用戶提供一個鏈接。然而,這在清除目錄以及何時這樣做以及對生成文件的訪問進行驗證方面存在更多問題。
對此提出建議?嚴厲的批評?
是的我猜想關閉文件句柄強制它刷新變量,所以我可以返回它。另外,我不得不在頭文件中添加'-attachment =>'filename.xls'',否則Firefox無法找出如何處理文件。 我會研究CGI :: A :: P :: Stream,但我們所做的文件不應該大到足以影響。 謝謝! – wes 2009-08-28 22:07:16