www.farid-hajji.net banner

Farid Hajji

Perl: Einführung, Anwendungen, Referenz (2/e) [Support-Site]

Farid Hajji: Perl - Einführung, Anwendungen, Referenz
2., aktualisierte und erweiterte Auflage
Addison-Wesley Longman, ISBN 3-8273-1535-2

Ergänzung

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
FreeBSD Logo