[bcn-pm] Consulta con una imagen

Martin Archanco dix10 at speedy.com.ar
Fri Sep 20 10:24:45 CDT 2002


Lo voy a probar y modificar a ver como funciona,,, gracias...
----- Original Message -----
From: "tim" <zeno at timallen.org>
To: "barcelona-pm" <barcelona-pm at mail.pm.org>
Sent: Thursday, September 19, 2002 2:52 AM
Subject: Re: [bcn-pm] Consulta con una imagen


Martin Archanco wrote:
> Tengo un formulario para que los usuarios puedan enviar productos, el tema
> es cuando cargan una imagen. Hay un boton examinar y la logica es que
cuando
> el usuario carga una imagen desde su maquina, la cargeu a un directori
ocon
> permisos de escritura ,,en mi web y tendria que poner el path de la imagen
> en la BD. (Todo esto si mis razonamientos son correcto,,je)
> El tema es que no se como hacer para cargar la imagen en un directorio de
mi
> site, no se como cargarla.Alguien que me pueda orientar,,,!!!!??

Hola Martin,
Una manera de solucionar el problema se encuentra en el fichero
adjuntado.  Para utilizar esto, hace falta en FORM en HTML como:

<form action="upload.cgi" method="post" enctype="multipart/form-data">
<p>Indicar un fichero para enviar:
<input type="FILE" name="file">
<p>Indicar el nombre de este fichero
<input type="TEXT" name="filename">
</form>

Todo esto tomo desde p.98-99 de Oreilly CGI Programming.

Hay que poner el upload.cgi en una carpeta con permisos de ejecución, y
ajustar el ACTION de la primera línea del form en acuerdo.

Ayi, no tengo tiempo para explicarlo, mi bebe tiene que ir a la
guardaría ya!  Suerte.
--
zeno/tim



----------------------------------------------------------------------------
----


> #!/usr/bin/perl -wT
>
> use strict;
> use CGI;
> use Fcntl qw( :DEFAULT :flock );
>
> use constant UPLOAD_DIR     => "/usr/local/apache/data/uploads";
> use constant BUFFER_SIZE    => 16_384;
> use constant MAX_FILE_SIZE  => 1_048_576;       # Limit each upload to 1
MB
> use constant MAX_DIR_SIZE   => 100 * 1_048_576; # Limit total uploads to
100 MB
> use constant MAX_OPEN_TRIES => 100;
>
> $CGI::DISABLE_UPLOADS   = 0;
> $CGI::POST_MAX          = MAX_FILE_SIZE;
>
> my $q = new CGI;
> $q->cgi_error and error( $q, "Error transferring file: " .
$q->cgi_error );
>
> my $file      = $q->param( "file" )     || error( $q, "No file
received." );
> my $filename  = $q->param( "filename" ) || error( $q, "No filename
entered." );
> my $fh        = $q->upload( "file" );
> my $buffer    = "";
>
> if ( dir_size( UPLOAD_DIR ) + $ENV{CONTENT_LENGTH} > MAX_DIR_SIZE ) {
>     error( $q, "Upload directory is full." );
> }
>
> # Allow letters, digits, periods, underscores, dashes
> # Convert anything else to an underscore
> $filename =~ s/[^\w.-]/_/g;
> if ( $filename =~ /^(\w[\w.-]*)/ ) {
>     $filename = $1;
> }
> else {
>     error( $q, "Invalid file name; files must start with a letter or
number." );
> }
>
> # Open output file, making sure the name is unique
> until ( sysopen OUTPUT, UPLOAD_DIR . "/$filename", O_CREAT | O_RDWR |
O_EXCL ) {
>     $filename =~ s/(\d*)(\.\w+)$/($1||0) + 1 . $2/e;
>     $1 >= MAX_OPEN_TRIES and error( $q, "Unable to save your file." );
> }
>
> # This is necessary for non-Unix systems; does nothing on Unix
> binmode $fh;
> binmode OUTPUT;
>
> # Write contents to output file
> while ( read( $fh, $buffer, BUFFER_SIZE ) ) {
>     print OUTPUT $buffer;
> }
>
> close OUTPUT;
>
> print $q->header( "text/plain" ), "File received.";
>
> sub dir_size {
>     my $dir = shift;
>     my $dir_size = 0;
>
>     # Loop through files and sum the sizes; doesn't descend down subdirs
>     opendir DIR, $dir or die "Unable to open $dir: $!";
>     while ( readdir DIR ) {
>         $dir_size += -s "$dir/$_";
>     }
>     return $dir_size;
> }
>
>
> sub error {
>     my( $q, $reason ) = @_;
>
>     print $q->header( "text/html" ),
>           $q->start_html( "Error" ),
>           $q->h1( "Error" ),
>           $q->p( "Your upload was not procesed because the following error
",
>                  "occured: " ),
>           $q->p( $q->i( $reason ) ),
>           $q->end_html;
>     exit;
> }
>




More information about the Barcelona-pm mailing list