Farid Hajji: Perl - Einführung, Anwendungen, Referenz
2., aktualisierte und erweiterte Auflage
Addison-Wesley Longman, ISBN 3-8273-1535-2
cgi-upload.pl
#!/usr/local/bin/perl -w
# cgi-upload.pl -- File-Upload mit CGI.pm
use CGI;
use CGI::Carp 'fatalsToBrowser';
use Data::Dumper;
$CGI::POST_MAX = 1024 * 1024; # Hoechstens 1 MByte akzeptieren!
my $query = new CGI;
unless ($query->param()) {
# Keine Daten angekommen; Eingabeformular senden.
print
$query->header(),
$query->start_html("File-Upload CGI-Beispiel"),
$query->h1("File-Upload mit CGI.pm"),
$query->start_multipart_form(),
"Bitte Datei angeben: ",
$query->filefield(-name => 'uploaded_file'),
$query->submit,
$query->end_form(),
$query->end_html();
} else {
# Es sind Daten angekommen; auswerten.
my $filefh = $query->upload('uploaded_file');
my $finfo = $query->uploadInfo($filefh);
# $filefh ist ein Filehandle zum gesendeten File.
# Wir pruefen aber zuerst, ob der File-Transfer auch
# richtig abgeschlossen werden konnte (User hat nicht
# mit STOP die Uebertragung geschlossen):
if (!$filefh && $query->cgi_error) {
my $errmsg = $query->header(-status => $query->cgi_error);
print
$query->header(),
$query->start_html("Fehler"),
"Fehler beim Upload: $errmsg",
$query->end_html();
exit 0;
}
# Der Filehandle ist okay, wir lesen nun alle Daten ein
# und speichern sie irgendwohin. Wir gehen davon aus,
# dass es sich um eine binaere Datei handelt:
open(OUTFILE, "> /tmp/fromupload.$$") or die "can't create file: $!\n";
while (read($filefh, $buffer, 1024)) {
print OUTFILE $buffer;
}
close(OUTFILE);
# Wir speichern auch die diversen Informationen zu dieser Datei
# in einem Logfile (das sollte lieber mittels flock()
# atomar geschehen (NYI)).
open(LOGFILE, ">> /tmp/upload.log") or die "can't open log: $!\n";
print LOGFILE "/tmp/fromupload.$$:\n", Dumper($finfo), "\n";
close(LOGFILE);
# Okay, alles klar!
print
$query->header(),
$query->start_html('File uploaded'),
"Erhalten: ", $query->p(),
$query->pre(Dumper($finfo)),
$query->end_html();
}
[Prev] [Up] [Relevant Chapter] [Next]
[Alte Quelle]
| Last modified: $Date: 2006/05/18 12:55:47 $ FH. Search :: Sitemap :: Disclaimer :: Copyright :: Privacy |
|