»» type='file' liefert dem serverseitigen Parser zwei Dinge:
»» (1) den full qualifizierten Pfad/Dateiname der lokalen Datei
»» (2) einen Handle auf die DateiDas (2) ist falsch. Den Handle den du meinst, liefert Perl und ist eine temporäre Datei, die das CGI Modul beim upload erstellt. Der hat nichts mit der lokalen Datei zu tun.
Ok, schauen wir mal genauer hin. Zum Schreiben einer Upload-Datei auf dem Server nehme ich die Funktion read():
read FILEHANDLE,SCALAR,LENGTH,OFFSET
read() liest also einen FILEHANDLE aus. Dabei wird eine temporäre Datei geschrieben.
Der FILEHANDLE wird von CGI.pm geliefert:
my $handle = $q->param('myfile'); # und auch der Name der Datei
Und hier eine komplette Funktion:
sub upload{
my $handle = $q->param('myfile'); # und auch der Name der Datei
my($remote_filename, $local_path) = fileparse $handle;
my ($buffer, $sum) = (0,0);
open (OUTFILE,">/home/$remote_filename");
binmode OUTFILE;
while (my $bytesread = read($handle, $buffer, 1024)) {
$sum += $bytesread;
print OUTFILE $buffer;
}
close OUTFILE;
print "Summe: $sum";
exit;
}
man CGI zu temp. Dateien beim Upload:
CGI.pm can process uploaded file. Ordinarily it spools the uploaded file to a temporary directory, then deletes the file when done.
Hotte
Wenn der Kommentar nicht zum Code passt, kann auch der Code falsch sein.