|
|
|||||||||||||||||||||||||
|
IntroducciónEn este tutorial les voy a mostrar una manera rápida de hacer "uploads" de archivos como pueden ser imagenes, zips, archivos de texto, etc, por medio de perl a tu servidor. Esto nos va a servir si queremos que usuarios puedan estacionar archivos en nuestro servidor, para crear galerias, disco virtual, etc. Para poder entender este tutorial es necesario que tengas conocimientos básicos de formularios HTML. El formularioLo primero que debemos de hacer es configurar el formulario HTML para que pueda aceptar un archivo y envíe el mismo de manera correcta. El campo HTML que le permite a los usurios escojer un archivo para poder enviarlos se llama "FILE". Así que pondríamos algo así:
<input type="file" name="archivo" size="30">
Muy bien, ya tenemos el campo para que nuestro usuarios puedan escojer el archivo que desean enviar, pero ahora necesitamos hacer una pequeña modificación en el tag de "FORM" para que envíe el archivo correctamente:
<form action="upload_archivo.cgi" method="post" ENCTYPE="multipart/form-data">
Vemos como el parametro especial es el que dice ENCTYPE="multipart/form-data" lo cual nos indica que vamos a enviar un archivo junto con los datos de nuestra forma. Entonces creamos un archivo al que le vamos a poner forma_upload.htm con el siguiente código:
<!doctype html public "-//w3c//dtd html 3.2//en">
<html> <head> <body bgcolor="#ffffff" text="#000000" link="#0000ff" vlink="#800080" alink="#ff0000"> <center> </body> </html> El CGIYa que tenemos nuestro formulario HTML hecho, ahora vamos a crear nuestro CGI. Lo primero que tenemos que hacer es recibir todos los datos enviados en nuestra forma. Esto lo vamos a hacer con el módulo CGI, guardando cada uno de los campos enviados en un hash:
my %Input;
my $query = new CGI; foreach my $pair(@pairs){ Lo siguiente será incializar unas variables, una con la ruta de el directorio donde queremos que se estacionen los archivos enviados, y un array con las extensiones de archivos que queremos recibir:
#Directorio donde queremos estacionar los archivos
my $dir = "/ruta/al/directorio"; #Array con extensiones de archivos que podemos recibir Ahora lo que vamos a hacer es crear un funcion que se llame recepcion_de_archivo la cual se encargara de recibir el archivo y estacionarlo correctamente. Cuando nos llega el nombre de el archivo, llega con todo y el directorio local, por lo que vamos a crear unas expresiones regulares para sacar solamente el nombre de el archivo, y vamos a poner el resultado final en una nueva variable:
my $nombre_en_servidor = $Input{'archivo'};
$nombre_en_servidor =~ s/ /_/gi; $nombre_en_servidor =~ s!^.*(\\|\/)!!; Antes de empezar a recibir el archivo vamos a checar si estamos recibiendo un archivo con cualquiera de las extensiones que queriamos:
my $extension_correcta = 0;
foreach (@extensiones){ Lo que hicimos fue crear una nueva variable llamada extension_correcta la cual será puesta como 1 en caso de que se encuentre cualquiera de las extensiones en el archivo, de lo contrario quedara con el 0. Muy bien, ya que hicimos todo esto ahora tenemos que hacer la parte más importante, la recepcion y creación del nuevo archivo: if($extension_correcta){ #Cerramos el archivo creado }else{ Muy bien, ya tenemos nuestro código listo. Código FinalEl código final de nuestro CGI debe de ser el siguiente:
#!/usr/bin/perl -w
######################################################## use strict; my %Input; my $query = new CGI; foreach my $pair(@pairs){
#Array con extensiones de archivos que podemos recibir
#TODO SALIO BIEN exit(1);
my $nombre_en_servidor = $Input{'archivo'};
foreach (@extensiones){
#Abrimos el nuevo archivo #Transferimos byte por byte el archivo #Cerramos el archivo creado }else{
|
||||||||||||||||||||||||
|
|||||||||||||||||||||||||