Mon application Web fonctionne sur Apache mod_perl
en utilisant CGI :: Application. Je veux fournir un téléchargement d'un fichier généré. Dans le passé (avant que nous utilisions mod_perl
et CGI :: App) j'ai juste spoulé un fichier csv à STDOUT
comme il a été généré. Maintenant, je prends un peu plus de raffinement - créer une feuille de calcul Excel en utilisant Spreadsheet :: WriteExcel - et je n'arrive pas à l'imprimer depuis la poignée de fichier.Comment puis-je fournir un téléchargement de fichier temporaire en utilisant mod_perl et 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;
}
La sortie est simplement une réponse vide et l'avertissement est également vide.
La méthode que j'utilise pour écrire la feuille de calcul dans un handle de fichier est à peu près tout droit sortie du documentation, donc je suppose que le problème est dû à une certaine noobery CGI :: App de ma part. Les méthodes suggérées par la documentation pour les handles de fichiers et mod_perl
se sont révélées plutôt infructueuses. Je suppose que je devrais mentionner que je cours sous Windows, et que ma solution de contournement actuelle est de créer un fichier et de fournir à l'utilisateur un lien vers celui-ci. Cela pose plus de problèmes, cependant, en ce qui concerne l'effacement du répertoire et quand le faire, ainsi que l'authentification pour l'accès aux fichiers générés.
Suggestions? Critique cinglante?
Ouais je suppose que la fermeture du handle de fichier le force à vider la variable afin que je puisse le retourner. En outre, j'ai dû ajouter '-attachment => 'filename.xls'' à l'en-tête ou firefox ne pouvait pas savoir quoi faire avec le fichier. Je vais regarder dans CGI :: A :: P :: Stream, mais les fichiers que nous faisons ne devraient pas être assez gros pour importer. Merci! – wes