• Publicidad

Subir múltiples archivos con Perl

¿Apenas comienzas con Perl? En este foro podrás encontrar y hacer preguntas básicas de Perl con respuestas aptas a tu nivel.

Subir múltiples archivos con Perl

Notapor bruno chavez » 2008-06-05 22:34 @982

¡Hola!

Tengo un cgi que sube un archivo al server... jala muy bien, pero el problema es que necesito que suba varios archivos, es decir, yo selecciono con múltiples input file y sube todos al servidor y los graba en el server... ahorita está así, el form que llama al cgi:

Sintáxis: [ Descargar ] [ Ocultar ]
  1. <?php 
  2. // funcion que crea o revisa que una carpeta este generada dentro del servidor. 
  3. function mkdir_recursiva($path, $mode) { 
  4. is_dir(dirname($path)) || mkdir_recursiva(dirname($path), $mode); 
  5. return is_dir($path) || @mkdir($path, $mode); 
  6.  
  7. // funcion que genera un nombre de archivo aleatorio de tamaño x 
  8. function randomtext($tamano) { 
  9. $patron = "abcdefghijklmnopqrstuvwxyz1234567890"; 
  10. for ($i=0; $i<$tamano; $i++) { 
  11. $llave .= $patron{rand(0,35)}; 
  12. return $llave; 
  13.  
  14. $ok = mkdir_recursiva("/home/users/web/b890/sl.recintoi/public_html/tmp", 0755);  
  15.  
  16.  
  17. ?> 
  18. <form action="/upload.cgi" method="post"  
  19. enctype="multipart/form-data">  
  20. <p>Archivo: <input type="file" name="fuente" /></p>  
  21. <input type="hidden" value="/baby/img/cuadros/" name="dir" /> 
  22. <input type="hidden" value="<?=randomtext(8)?>" name="destino" />  
  23. <input type="hidden" value="<?=$R?>*<?=$IDC?>" name="P" /> 
  24. <input type="hidden" value="/baby/admin/okupload.php" name="terminar" /> 
  25. <p><input type="submit" name="Submit" value="Submit Form" /></p>  
  26. </form>  
  27. </body>  
  28. </html> 


El input fuente es el archivo como escondidos le envío:
dir : Nombre de la carpeta donde quiero que lo guarde en el servidor.
destino: nombre del archivo destino con el que se va a grabar.
P : son parámetros que envío desde el php.
terminar: es el archivo php que quiero que llame una vez que termine de subir el archivo.

Ahora el perl es el siguiente:

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
$CGI::POST_MAX = 1024 * 15000;
my $safe_filename_characters = "a-zA-Z0-9_.-";

my $query = new CGI;

my $fuente = $query->param("fuente");
my $dir = $query->param("dir");
my $destino = $query->param("destino");
my $terminar = $query->param("terminar");
my $P = $query->param("P");


my $upload_dir = "/home/users/web/b890/sl.recintoi/public_html/tmp";

if ( !$fuente )
{
 print $query->header ( );
 print "Archivo muy grande, reduzca su foto.";
 exit;
}

my ( $name, $path, $extension ) = fileparse ( $fuente, '\..*' );
$fuente = $destino . $extension;
$fuente =~ tr/ /_/;
$fuente =~ s/[^$safe_filename_characters]//g;


if ( $fuente =~ /^([$safe_filename_characters]+)$/ )
{
 $fuente = $1;
}
else
{
 die "El archivo contiene caracteres invalidos.";
}

my $upload_filehandle = $query->upload("fuente");

open ( UPLOADFILE, ">$upload_dir/$fuente" ) or die "$!";
binmode UPLOADFILE;

while ( <$upload_filehandle> )
{
 print UPLOADFILE;
}

close UPLOADFILE;

print $query->header ( );
print <<END_HTML;
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
 <head>
   <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
   <meta http-equiv="refresh" content="0;URL=http://www.recintocampestre.com$terminar?D=$dir&A=$fuente&P=$P" />
   <title>Thanks!</title>
   <style type="text/css">
     img {border: none;}
   </style>
 </head>
 <body>
<!--   <p>Thanks for uploading your photo!</p>
   <p>Your photo:</p>
   <p><img src="http://www.recintocampestre.com/tmp/$ fuente" alt="Photo" /></p> -->
 </body>
</html>
END_HTML
Coloreado en 0.003 segundos, usando GeSHi 1.0.8.4


No soy experto en Perl pero más o menos le he ido modificando y añadiéndole cosas, pero el problema es que necesito que suba varios archivos y no lo consigo...

Alguien me podría ayudar... ya estoy empezando a desesperarme y me urge...

Saludos y gracias a todos
Bruno Chavez
bruno chavez
Perlero nuevo
Perlero nuevo
 
Mensajes: 1
Registrado: 2008-06-05 22:24 @975

Publicidad

Notapor explorer » 2008-06-06 05:40 @278

Bienvenido a los foros de Perl en Español, bruno chavez.

¿Has probado a hacer un bucle por todas las cajas con nombres de fichero para bajártelos uno a uno?

Deberías empezar por rediseñar la página para que admita más de un fichero, en el formulario. Luego, en el cgi, recoges todos los ficheros pasados por el usuario, y en un bucle, bajarles uno a uno.
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14480
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Notapor kidd » 2008-06-10 11:12 @508

Hola Bruno,

Bienvenido al foro de Perl en Español.

Cuando se trata de subir varios archivos a la vez, yo uso una combinación de Flash + Perl.

Hay una aplicación Flash, que tiene su versión gratuita, llamada MultiPowUpload:
http://www.element-it.com/MultiPowUpload.aspx

Con este pequeño Flash los usuarios seleccionan los archivos que desean subir, y el Flash se encarga de subir uno a uno a tu servidor, enviando el archivo a cualquier script que desees, en este caso sería el script de Perl que ya tienes existente.

Otra de las grandes ventajas es que te muestra gráficamente el estado de la transferencia.

Es una recomendación que te doy, y que creo que facilita mucho las cosas, tanto para ti como para tus usuarios.

Saludos
Uriel Lizama Perl programmer fundador de Perl en Español
Perl Programming Language
Avatar de Usuario
kidd
Creador de Perl en Español
Creador de Perl en Español
 
Mensajes: 1166
Registrado: 2003-10-15 16:52 @744
Ubicación: México

Notapor explorer » 2008-06-10 15:01 @667

No estaría de más que alguien se atreviera a hacer la versión Perl de ese Flash.

Yo creo que con CGI::Ajax quedaría muy bien...
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14480
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Notapor kidd » 2008-06-10 15:48 @700

Conozco uno open source:
http://sourceforge.net/projects/uber-uploader

Y también uno comercial:
http://encodable.com/filechucker/

Aún así me gusta más el de Flash :wink:
Uriel Lizama Perl programmer fundador de Perl en Español
Perl Programming Language
Avatar de Usuario
kidd
Creador de Perl en Español
Creador de Perl en Español
 
Mensajes: 1166
Registrado: 2003-10-15 16:52 @744
Ubicación: México


Volver a Básico

¿Quién está conectado?

Usuarios navegando por este Foro: Bing [Bot] y 2 invitados