Datei bleibt bei Upload via Perl leer
wunderwarzenschwein
- perl
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
Hallo wunderwarzenschwein,
$file=$params{'file'};
Wo kommt %params her?
Grüße,
CK
Hi,
$file=$params{'file'};
Wo kommt %params her?
Hier:
my $q=new CGI;
my %params=$q->Vars;
wunderwarzenschwein
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
$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.
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