wunderwarzenschwein: Datei bleibt bei Upload via Perl leer

Hi,

ich habe mir aus http://aktuell.de.selfhtml.org/artikel/cgiperl/file-upload/index.htm und http://perlbase.xwolf.de/cgi-bin/perlbase.cgi?dis.10.7 versucht, ein Skript zum Upload von Bildern zusammenzubasteln:

my $max = 1024 * 1000;

$file=$params{'file'};

open (OUTFILE, '>/dir/cms/test.jpg') or die("Fehler bei Hochladen",$!);
binmode OUTFILE;
while ($bytesread = read($file, $buffer, 1024)) {
 $sum += $bytesread;
 if( $sum > $max){
  close OUTFILE;
  unlink '/dir/cms/test.jpg';
  die "Das Upload Limit ist erreicht","Abbruch...";
 }
 print OUTFILE $buffer;
}
close OUTFILE;

Das Skript läuft ohne Fehlermeldung durch und die Datei wird auch angelegt, bleibt jedoch leer.
Hat jemand eine Ahnung, woran das liegen könnte?
Der Vollständigkeit halber hier noch der Code des Formulars:

<form action='uploadimage.cgi' method='post' enctype='multipart/form-data'>
<input name='file' type='file'>
<input type='submit' value='Speichern'>
</form>

Danke im Voraus für alle Antworten

wunderwarzenschwein

--
ss:} zu:$ ls:} fo:| de:] va:) ch:? sh:( n4:# rl:? br:> js:| ie:( fl:{ mo:)
  1. Hallo wunderwarzenschwein,

    $file=$params{'file'};

    Wo kommt %params her?

    Grüße,
     CK

    --
    Wer sich zu überschwänglich freut, wir später Grund zum Weinen haben.
    1. Hi,

      $file=$params{'file'};
      Wo kommt %params her?

      Hier:

      my $q=new CGI;
      my %params=$q->Vars;

      wunderwarzenschwein

      --
      ss:} zu:$ ls:} fo:| de:] va:) ch:? sh:( n4:# rl:? br:> js:| ie:( fl:{ mo:)
      1. Hallo wunderwarzenschwein,

        $file=$params{'file'};
        Wo kommt %params her?

        Hier:

        my $q=new CGI;
        my %params=$q->Vars;

        Ich denke, das ist das Problem. Aus perldoc CGI:

        When using this, the thing you must watch out for are multivalued CGI
               parameters.  Because a hash cannot distinguish between scalar and list
               context, multivalued parameters will be returned as a packed string,
               separated by the "\0" (null) character.  You must split this packed
               string in order to get at the individual values.  This is the conven-
               tion introduced long ago by Steve Brenner in his cgi-lib.pl module for
               Perl version 4.

        Ich denke, ähnliche Probleme ergeben sich bei Fileuploads.

        Grüße,
         CK

        --
        Kommt ein Vektor zur Drogenberatung: "Hilfe, ich bin linear abhaengig!"
  2. $file=$params{'file'};

    Vielleicht ist es sinnvoller, hier direkt auf die CGI Funktion zu zugreifen.

    my $file = CGI::param('file');

    evtl. gibt die Funktion 'vars' die du anwendest nicht den Filehandle zurück.

    Struppi.

    1. Hi,

      $file=$params{'file'};
      Vielleicht ist es sinnvoller, hier direkt auf die CGI Funktion zu zugreifen.
      my $file = CGI::param('file');

      Vielen Dank. So funktionierts.

      wunderwarzenschwein

      --
      ss:} zu:$ ls:} fo:| de:] va:) ch:? sh:( n4:# rl:? br:> js:| ie:( fl:{ mo:)