Prueba con este (no probado):
Using perl Syntax Highlighting
#!/usr/bin/perl
use warnings
;
use CGI
;
use CGI
::Carp qw(fatalsToBrowser
);
my $directorio = '/home/www/rcdasoft/';
my $cgi = CGI
->new();
#my $nombre_fichero = $cgi->param('archivo'); # Algunos navegadores no devuelven correctamente el nombre
my $nombre_fichero = 'archivocualquiera'; # Ponemos un nombre de fichero cualquiera
my $fichero = $cgi->upload('archivo'); # Accedemos al campo upload del formulario
my $buffer;
open OUTFILE
, ">$directorio/$nombre_fichero";
binmode OUTFILE
; # Necesario si estamos en UNIX/Linux
while ( read($fichero, $buffer, 8192) ) { # Transferimos en bloques de 8Kb
print OUTFILE
$buffer;
}
close OUTFILE
;
print $cgi->header(),
$cgi->start_html('Fichero enviado'),
$cgi->p('Fichero enviado'),
$cgi->end_html;
Coloreado en 0.002 segundos, usando
GeSHi 1.0.8.4
Un par de detalles:
* Con el módulo CGI no es necesario sacar 'a mano' las cabeceras ('Content') del resultado. Con la función header() ya las tenemos
* No es necesario poner el binmode() a $fichero porque estamos usando read() para leer su contenido, así que ya estamos accediendo en formato binario a su contenido.
* En el programa, 'archivo' es el nombre del campo del formulario que el usuario utiliza para enviarnos su fichero. Debes cambiar en el programa ese nombre según el campo del formulario que estés usando en la página
* El acceder a ese campo, se puede hacer de dos maneras, como ves en el código. Con param() accedes al nombre del fichero (según el navegador que se use, será el nombre del fichero o el nombre junto con el path, local, en el lado del cliente). Y la otra forma es con upload(), que devuelve el
filehandle del fichero enviado y a partir del cual lo leemos. No usamos STDIN porque en el flujo que recibimos van muchas cosas mezcladas (cabeceras, separadores de campo, los propios valores de campos, etc.); por eso usamos CGI, para que se ocupe de esas cosas. Nosotros solo usamos upload() y nos olvidamos de todo lo demás.
Otra opción más corta (no probado):
Using perl Syntax Highlighting
#!/usr/bin/perl
use CGI
':standard';
use CGI
::Carp 'fatalsToBrowser';
$directorio = '/home/www/rcdasoft/';
$nombre_fichero = param
('archivo');
$fichero = upload
('archivo');
open OUTFILE
, ">$directorio/$nombre_fichero";
while ( <$fichero> ) {
print OUTFILE
$_;
}
close OUTFILE
;
print header
,
start_html
('Fichero enviado'),
p
('Fichero enviado'),
end_html
;
Coloreado en 0.002 segundos, usando
GeSHi 1.0.8.4