• Publicidad

Perl: Subir archivo con identificador

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

Perl: Subir archivo con identificador

Notapor Gourbette » 2008-06-22 18:52 @827

Hola,

Soy programador de PHP entre otros lenguajes y estoy creando un script para subir archivos al servidor.

Hoy estuve viendo los ejemplos de cómo hacerlo con Perl, ya que con PHP no puedo consultar el progreso a no ser que instale una extensión, cosa que no quiero en estos momentos.

Nunca había tocado Perl hasta hoy y he estado deduciendo el script aquí posteado y añadido algunas modificaciones.

Me gustaría resolver un par de dudas, ya que desconozco las funciones que Perl pone a nuestra disposición, aunque la sintaxis del lenguaje es parecida a PHP, cosa que me facilita el aprendizaje.

El upload lo hace sin problemas, pero:

1. ¿Cómo podría subir el archivo añadiéndole un identificador? De esta forma poder consultar su progreso y mostrarlo al usuario.

2. Cuando subo el archivo a la carpeta correspondiente, ¿Cómo elimino el archivo temporal que se crear dentro de cgi-bin?

3.
¿Cómo puedo crear carpetas? Me interesaría crear una carpeta con el nombre del identificador que obtengo mediante GET dentro de la carpeta de archivos para subirlo ahí.

Aún tengo que añadir algunas cosas, como tamaño máximo, etc... pero de momento lo que me trae más "de cabeza" son estas 3 cuestiones.

Os adjunto el código modificado:

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
#!C:\xampp\perl\bin\perl.exe -w

use CGI qw(:standard);
print header;
require 'postget.pl';

my %datos;
%datos = &postget('G');
my $codeID = $datos{'codeID'};              
my $upID = $datos{'upID'};

if($codeID && $upID)
{
        $query = new CGI;
        $UpFile = $query->param("UpFile");
        $UpFile =~ s/.*[\/\\](.*)/$1/;
        $UpFileHandle = $query->upload("UpFile");
        $UpDir = '../files';
        my @Ext = ('php','php3','php4','pl','cgi','asp','aspx');
        my $CorrectExt = 1;
        foreach(@Ext)
        {
                if($UpFile =~ /\.$_$/i)
                {
                        $CorrectExt = 0;
                        last;
                }
        }
        if($CorrectExt eq 1)
        {
                open(UPLOADFILE, ">$UpDir/$UpFile") or die 'Upload error.';
                binmode UPLOADFILE;
                while(<$UpFileHandle>)
                {
                        print UPLOADFILE;
                }
                close UPLOADFILE;
                print 'File uploading success.';
                print '<br />';
                print 'CodeID: '.$codeID;
                print '<br />';
                print 'UpID: '.$upID;
        }
        else
        {
                print 'The file extension is forbidden.';
        }
}
else
{
        print 'Upload error: CodeID and UpID are empty.';
}
 
Coloreado en 0.003 segundos, usando GeSHi 1.0.8.4


Espero que podáis ayudarme.
Gracias.
Gourbette
Perlero nuevo
Perlero nuevo
 
Mensajes: 2
Registrado: 2008-06-22 18:35 @816

Publicidad

Notapor creating021 » 2008-06-22 19:41 @861

2. Cuando subo el archivo a la carpeta correspondiente, ¿Cómo elimino el archivo temporal que se crear dentro de cgi-bin?

Si hablas de un archivo en disco... usando la función unlink

Sintáxis: [ Descargar ] [ Ocultar ]
  1. unlink "archivo1", "archivo2..."; 

Si estás en un VMS, usa

Sintáxis: [ Descargar ] [ Ocultar ]
  1. 1 while unlink "archivo1", "archivo2..."; 


3. ¿Cómo puedo crear carpetas? Me interesaria crear una carpeta con el nombre del identificador que obtengo mediante GET dentro de la carpeta de archivos para subirlo ahí.

Con la función mkdir
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
mkdir "diractorio1", "directorio2";
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4


Te recomiendo los siguientes tutorial:

http://perlenespanol.com/tutoriales/cgi ... pasos.html
http://perlenespanol.com/tutoriales/cgi ... u_cgi.html

El libro de CGI es un libro antiguo pero útil, te lo recomiendo.
Expect the worst, is it the least you can do?
Avatar de Usuario
creating021
Perlero frecuente
Perlero frecuente
 
Mensajes: 595
Registrado: 2006-02-23 16:17 @720
Ubicación: Frente al monitor

Re: Perl: Subir archivo con identificador

Notapor explorer » 2008-06-22 19:51 @869

Gourbette escribiste:Me gustaría resolver un par de dudas, ya que desconozco las funciones que Perl pone a nuestra disposición, aunque la sintaxis del lenguaje es parecida a PHP, cosa que me facilita el aprendizaje.

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

Perl no funciona de la misma manera que PHP, que pone a disposición del programador 5.000 funciones, provenientes de las librerías que se hayan compilado con el núcleo de PHP.

En lugar de eso, se suele hacer lo mismo que con otros lenguajes: importar las librerías en el momento de la ejecución del programa. En Perl, esas librerías se llaman módulos. Por ejemplo, para lo que quieres hacer hay algunos módulos en CPAN para conseguirlo. Uno de ellos es CGI::FileUpload que permite subir ficheros de forma asíncrona.

Como ha dicho creating021, en este sitio web hay algunos tutoriales para empezar a entender el uso con Perl.
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


Volver a Básico

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 5 invitados