Robert Allerstorfer: Fileupload-script

Einige postings weiter unten hat Frank Schönmann sein perl-script vorgestellt, mit dem man dateien auf einen server-rechner uploaden kann. Das entsprechende HTML-formular findet sich in Stefan's tchg.htm. Die angabe von maxlength=xxxbytes wird allerdings sowohl von Netscape, als auch vom Explorer ignoriert - ich hab's ausprobiert! Deshalb wäre es gut, eine filesize-Abfrage im perl-script zu machen und eine meldung auszugeben, falls das upzuloadende file größer als das oben im script angegebene $maxsize ist.
Hier sein script nochmal, leicht modifiziert, schon etwas benutzerfreundlicher und die aktuelle problematik aufgreifend:

====cut====
#!C:/Programme/Perl/bin/perl.exe

Original by Frank Schoenmann, Dez. 1998, mailto:fs@tower.de, http://top.tower.de

$url =  "/files/upload.html";     # URL des Fensters, das nach dem Upload angezeigt wird
$uploaddir = "D:/Web/files/upload/";  # Pfad des Upload-Verzeichnisses am Server

$maxsize = 1048576;     # [bytes] sollte unten im Script benutzt werden

----------------------------------------------------------------------------------------------

binmode STDIN;
read STDIN, $Daten, $ENV{'CONTENT_LENGTH'};

@Teile = split /-----------------------------.{9}/, $Daten;
@Datei = split /\n/, $Teile[1], 5;
while ($Datei[1] =~ /\/) { $Datei[1] =~ s/^.*\//; }
$Datei[1] =~ s/"//;
chop $Datei[1];
chop $Datei[4];

open DATEI, ">$uploaddir$Datei[1]";
binmode DATEI;
print DATEI $Datei[4];
close DATEI;

print "Location: $url\n\n";
====cut====

Vielleicht könnte Frank oder ein anderer perl-profi die size-abfrage abbauen?
Das script ist nämlich seeehr nützlich, finde ich.

lg,
Robert

  1. hi!

    #!C:/Programme/Perl/bin/perl.exe

    Das hat unter Windows überhaupt keine Auswirkung. Man kann also einfach #!/usr/bin/perl stehenlassen, damit es unter Windows und unter Unix funktioniert.

    open DATEI, ">$uploaddir$Datei[1]";
    binmode DATEI;
    length $Datei[4] < $maxsize || { print "Location: fehler.html\n\n"; die; }
    print DATEI $Datei[4];
    close DATEI;

    Obiges müsste eigentlich funktionieren. Ansonsten vielleicht so:

    if (length $Datei[4] < $maxsize)
    {
      open DATEI, ">$uploaddir$Datei[1]";
      binmode DATEI;
      print DATEI $Datei[4];
      close DATEI;
      print "Location: $url\n\n";
    } else {
      print "Location: fehler.html\n\n";
    }

    bye, Frank!