Hallo,ich hatte mir da letztens auch den Fuß ins Ohr programmiert (probiert, probiert und nochmal probiert...)
1. Die CGI-Parameter müssen zu Beginn gesetzt werden:
$CGI::DISABLE_UPLOADS = 0;
$CGI::POST_MAX = 10_000 (selbst die max.Anzahl Bytes bestimmen);
2. Die sendende Form muß enctype='multipart/form-data' haben (hast Du ja )
3. Der Zugrif auf das Dateihandle beim Upload hängt von der CGI-Version ab (habe ich im Buch gelesen), daraus habe ich mir meine eigene Routine geschrieben, die scheint zu funktionieren:
Vielleicht hilft Dir das weiter...
Good Luck...
#--------------------------------------
# sub uploadFile ( $objCgi, FeldName, ZielName ) as boolean
#--------------------------------------
sub uploadFile {
my $cgi = shift ( @_ ) || '';
my $szFeld = shift ( @_ ) || ''; # Parametername aus Formular
my $szZielName = shift ( @_ ) || ''; # Dateiname der Zieldatei
my $szUpload;
my $fh;
if ( $szUpload=$cgi->param( $szFeld ) ) {
# unterscheide CGI-Version
#-------------------------
if ( $CGI::VERSION ge 4.47 ) {
$fh= $cgi->upload ( $szUpload );
} # end >= 4.47
else {
if ( ref($szUpload)) {
$fh=$szUpload;
} #
else {
open ( $fh, "<".$cgi->tmpFileName($szUpload) )
|| fsvTerminate ("konnte tempfile[".$cgi->tmpFileName($szUpload)."] nicht oeffnen[$!]");
} # end else
} # end
unless ( open OUTFILE, ">$szZielName" ) {
fsvTerminate ("Fehler Datei [$szZielName] anlegen:\n[$!]");
} # end Fehler
chmod ( 0666, $szZielName );
binmode $fh;
binmode OUTFILE;
my $Buffer='';
while ( read ( $fh, $Buffer, 2048 )) {
print OUTFILE $Buffer;
} # end while
close ( OUTFILE );
close ( $fh );
return 1;
} # end if Upload
else {
return 0;
} # end else
} # end sub uploadFile
Datum: 18.01.2006-21:13
