Presentación

Ernesto Hernandez-Novich emhn at telcel.net.ve
Mon Jun 26 10:50:26 CDT 2000


On Mon, 26 Jun 2000, Felipe Gouveia - Correio de Caracas wrote:
>#!/usr/bin/perl
>#file: upload.pl
>
>use CGI qw/:standard/;
>
>print header,
>    start_html('file upload'),
>    h1('file upload');
>print_form()    unless param;
>print_results() if param;
>print end_html;
>
>sub print_form {
>    print start_multipart_form(),
>       filefield(-name=>'upload',-size=>60),br,
>       submit(-label=>'Upload File'),
>       end_form;
>}
>
>sub print_results {
>    my $length;
>    my $file = param('upload');
>    if (!$file) {
> print "No file uploaded.";
> return;
>    }
>    print h2('File name'),$file;
>    print h2('File MIME type'),
>    uploadInfo($file)->{'Content-Type'};
>    while (<$file>) {
> $length += length($_);
>    }
>    print h2('File length'),$length;
>}

El programa que adjuntaste solamente permite al usuario indicar el nombre del
archivo y en la rutina print_results _solamente_ se indica la longitud del
archivo; si quieres _salvarlo_ en el servidor, debes abrir un archivo en algún
directorio de acceso público o semipúblico y copiar las líneas del archivo.

En otras palabras, reemplaza el while por

open(COPIAR,">/tmp/subida");
while (<$file>) {     # Leo de línea en línea
  print COPIAR $_;
}
close(COPIAR);
close($file);
  
Si el archivo que se sube es binario (GIF, JPEG, basura Word/Excel/Powerpoint),
se complica un poco más porque el concepto de "línea" no existe, de manera que
debes usar algo como

open(COPIAR,">/tmp/subida");
while ($bytes = read($filename,$buffer,1024)) {    # Leo en buffers de 1k
  print COPIAR $buffer;
}
close(COPIAR);
close($file);
--
Ernesto Hernández-Novich - Running Linux 2.2.14 - Unix: Live free or die!
One thing is to be the best, and another is to be the most popular.
-----BEGIN GEEK CODE BLOCK-----
Version: 3.1
GCS d+(-) s+: a C+++$ UBLAVHIOSC++++$ P++++$ L+++$ E- W+ N++ ?o ?K w--- O- M- V
PS+ PE Y+ PGP>++ t+ 5 X+ R* tv+ b++ DI+++$ D++ G>++ e++ h+ r+ y++
-----END GEEK CODE BLOCK-----
Para suspender la suscripción a esta lista, favor enviar un e-mail a
<majordomo at pm.org> colocando "UNSUBSCRIBE caracas-pm-list"
en el cuerpo.



More information about the caracas-pm mailing list