Meine Web-App läuft auf Apache mod_perl
mit CGI :: Application. Ich möchte einen Download einer generierten Datei bereitstellen. In der Vergangenheit (bevor wir mod_perl
und CGI :: App verwendet haben) habe ich gerade eine csv-Datei an ausgegeben, wie sie generiert wurde. Jetzt mache ich ein wenig mehr Raffinesse - ich erstelle ein Excel-Spreadsheet mit Spreadsheet :: WriteExcel - und ich kann nicht scheinen, es aus dem Datei-Handle auszudrucken.Wie kann ich einen temporären Datei-Download mit mod_perl und CGI :: Application bereitstellen?
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;
}
Die Ausgabe ist nur eine leere Antwort, und die Warnung ist ebenfalls leer.
Die Methode, die ich benutze, um die Tabelle in ein Dateihandle zu schreiben, ist ziemlich direkt aus der documentation, also nehme ich an, dass das Problem aufgrund einiger CGI :: App noobery meinerseits ist. Die vorgeschlagenen Methoden der Dokumentation für Dateihandles und mod_perl
erwiesen sich ebenfalls als ziemlich fruchtlos.
Ich denke, ich sollte erwähnen, dass ich unter Windows laufe, und dass meine aktuelle Problemumgehung darin besteht, eine Datei zu erstellen und dem Benutzer einen Link zu ihm bereitzustellen. Das wirft jedoch mehr Probleme auf, wenn es darum geht, das Verzeichnis zu löschen und wenn dies der Fall ist, und auch eine Authentifizierung für den Zugriff auf die erzeugten Dateien.
Vorschläge? Zischende Kritik?
Ja, ich denke, das Schließen des Dateihandles zwingt ihn, die Variable zu leeren, damit ich sie zurückgeben kann. Außerdem musste ich '-attachment => 'filename.xls' im Header hinzufügen oder Firefox konnte nicht herausfinden, was mit der Datei zu tun war. Ich werde in CGI :: A :: P :: Stream schauen, aber die Dateien, die wir machen, sollten nicht groß genug sein, um von Bedeutung zu sein. Danke! – wes