hotti: <input type=file speichern??

Beitrag lesen

»» type='file' liefert dem serverseitigen Parser zwei Dinge:
»» (1) den full qualifizierten Pfad/Dateiname der lokalen Datei
»» (2) einen Handle auf die Datei

Das (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.