perlunity.de - PERL | JAVASCRIPT | PHP | MySQL | APACHE



#!/COMMUNITY

Members: 5374
davon online: 1
weitere User: 23
Click for quality!




11.02.2012 / 21:11

Community-Member werden   |   Paßwort vergessen   |   OnlineMonitor (1) Wer ist online ... OnlineMonitor starten !
     

 

Home


PERLscripts


PHPscripts


JAVAscripts


Hilfreiches


Links2www


Newscenter


Community


Interna




Community  »  CGI: Allgemeines Forum zur Themenübersicht Themensuche Themenansicht in Thread-Modus


BeitragFile-Upload unter Windows erzeugt leere Datei
Seitenanfang
Hallo,

ich habe ein Problem mit einem File-Upload unter Windows 2000 Server.
Das nachfolgende CGI-Script (aber auch mein eigenes sowie andere Beispiele aus dem Netz ) erzeugen nur eine leere Datei (0 Kb) auf dem Server. Unter Linux funktioniert das alles problemlos. Die Rechte für den Zielordner sind für jeden lesen und schreiben erlaubt.
Ich benutze einen ActivePerl-5.8.7.813 Version.
Da mich das „Teil“ schon zwei Tage beschäftigt, wäre ich für jede Hilfe dankbar.


############################################
#Formular Code
print "<form methode='post' action ='myupload-files2.cgi'enctype='multipart/form-data'>";
print . "<input type=file name=fld_bild1 size=60></td>"
…….
. "</table>"
."</form>";
##########################################

#######################################
#Upload-CGI
#!c:\Programme\perl\bin\perl.exe
use CGI;
$upload_dir = "c:\\htdocs\\upload";
$query = new CGI;

$filename = $query->param("fld_bild1");
$filename =~ s/.*[\/\\](.*)/$1/;
$upload_filehandle = $query->upload("fld_bild1");

open UPLOADFILE, ">$upload_dir\\$filename";
binmode UPLOADFILE;

while ( <$upload_filehandle> )
{
print UPLOADFILE;
}

close UPLOADFILE;

print $query->header ( );
print "<HTML>"
. "<HEAD>"
. "<TITLE>Thanks!</TITLE>"
. "</HEAD>"

. "<BODY>"
. "$upload_dir\\$filename"
. "</BODY>"
. "</HTML>"

Datum: 18.01.2006-15:22

Beitragre: File-Upload unter Windows erzeugt leere Datei
Seitenanfang
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

-






-
-