Perl en Español

  1. Home
  2. Tutoriales
  3. Foro
  4. Artículos
  5. Donativos
  6. Publicidad
 

Upload de Archivos y HTML

 
Publicar nuevo tema   Responder al tema    Foros de discusión -> HTML
Mensaje Dom Nov 20, 2005 9:35 pm
Jesusb0
Perlero Nuevo
Perlero Nuevo
Registrado: 20 Nov 2005
Mensajes: 5
Ubicación: Venezuela
Upload de Archivos y HTML Responder citando

Hola buenas, queria que me ayudaran si pueden, acabo de leer un manual en http://perlenespanol.baboonsoftware.com/archives-tut/000082.html para poder subir ficheros a un servidor, osea que cualquier persona que quiera subir un archivo a mi servidor lo pueda hacer buscando su archivo y subiendolo, pero pos me quede en 2 puntos, se html y muy poco php, pero no se nada de perl, en la guia salia que al final quedaria el archivo asi:

#!/usr/bin/perl -w

Eso lo conozco en Linux, pero no en Windows, como puedo hacer?

La segunda parte es como guardo ese archivo para que sea el CGI ?? si me pueden explicar please
THANKS
Mensaje Lun Nov 21, 2005 6:05 am
monoswim
Vive para Perl en Español
Vive para Perl en Español
Registrado: 18 Nov 2003
Mensajes: 716
Ubicación: Buenos Aires
Responder citando

Hola, en windows tienes que instalarte el intérprete de perl que lo bajas de activeperl.com y se instala por defoult en

c:/perl/bin/perl.exe

por lo cual la primera línea queda así

#!c:/perl/bin/perl.exe

Ahora bien ese archivo guardalo .pl o .cgi y guardalo en la carpeta cgi-bin de su programa de servidor web...Como el apache o algo así...

Espero que te sirva

Saludos
PD: El .pl o .cgi debe ser en fomato texto, askii
Mensaje Lun Nov 21, 2005 11:46 am
Jesusb0
Perlero Nuevo
Perlero Nuevo
Registrado: 20 Nov 2005
Mensajes: 5
Ubicación: Venezuela
Responder citando

Hola gracias por tu pronta respuesta, la verdad es que sigo igual, ya tengo creado mi archivo .cgi bien y todo, pero ahora pasa esto:

hice todo tal cual como esta y al momento de cargar me sale este error The requested URL /upload_archivo.cgi was not found on this server.

Si cambio el codigo html en
y le cambio la ruta de upload_archivo.cgi por /cgi-bin/upload_archivo.cgi (que es donde se encuentra el archivo)
me da el error:

No se puedo crear el archivo at C:/Archivos de programa/Apache Group/Apache2/cgi-bin/upload_archivo.cgi line 64. Si me pudiera ayudar le agradeceria mucho

de antemano Thanks
Mensaje Lun Nov 21, 2005 12:11 pm
explorer39
Perlero Frecuente
Perlero Frecuente
Registrado: 23 Ago 2005
Mensajes: 126
Ubicación: Valladolid, España
Responder citando

Es muy claro el error: No puede escribir el fichero que le indicas en la línea 64 del script.
O no tienes permiso de escritura en el directorio o ya existe el fichero pero no tiene permiso de escritura o existe pero pertenece a otro usuario (distinto del que ejecuta el servidor web) o el camino completo al lugar donde hay que crear el fichero es inalcanzable o se ha llenado el disco.
Mensaje Lun Nov 21, 2005 5:13 pm
Jesusb0
Perlero Nuevo
Perlero Nuevo
Registrado: 20 Nov 2005
Mensajes: 5
Ubicación: Venezuela
Responder citando

a ver compa, me dejastes 10 veces mas enredado que antes jeje, sorry pero no se mucho sobre perl y cgi , voy a ponerles aqui mi codigo cgi para ver si ven algo y el htm sorry por molestar

Codigo CGI:

#!C:\perl\bin\perl.exe -w

########################################################
#
# Código de ejemplo del tutorial: "Upload de archivos"
#
# Creado por: Uriel Lizama
# Todos los derechos reservado.
#
# http://perlenespanol.baboonsoftware.com/
#
#########################################################

use strict;
use CGI::Carp qw(fatalsToBrowser);
use CGI;

my %Input;

my $query = new CGI;
my @pairs = $query->param;

foreach my $pair(@pairs){
$Input{$pair} = $query->param($pair);
}


#Directorio donde queremos estacionar los archivos
my $dir = "/htdocs/archivos";

#Array con extensiones de archivos que podemos recibir
my @extensiones = ('gif','jpg','jpeg','bmp','png','txt');


recepcion_de_archivo(); #Iniciar la recepcion del archivo

#TODO SALIO BIEN
print "Content-type: text/html\n\n";
print "<h1>El archivo fue recibido correctamente</h1>\n";

exit(1);


sub recepcion_de_archivo{

my $nombre_en_servidor = $Input{'archivo'};
$nombre_en_servidor =~ s/ /_/gi;
$nombre_en_servidor =~ s!^.*(\\|\/)!!;


my $extension_correcta = 0;

foreach (@extensiones){
if($nombre_en_servidor =~ /\.$_$/i){
$extension_correcta = 1;
last;
}
}


if($extension_correcta){

#Abrimos el nuevo archivo
open (OUTFILE, ">$dir/$nombre_en_servidor") || die "No se puedo crear el archivo";
binmode(OUTFILE); #Para no tener problemas en Windows

#Transferimos byte por byte el archivo
while (my $bytesread = read($Input{'archivo'}, my $buffer, 1024)) {
print OUTFILE $buffer;
}

#Cerramos el archivo creado
close (OUTFILE);

}else{
print "Content-type: text/html\n\n";
print "<h1>Extension incorrecta</h1>";
print "Sólo se reciben archivo con extension:";
print join(",", @extensiones);
exit(0);
}


} #sub recepcion_de_archivo

Codigo HTML:

<html>

<head>
<title>Upload de Archivo - Tutorial de "Perl en Español"</title>
</head>

<body bgcolor="#ffffff" text="#000000" link="#0000ff" vlink="#800080" alink="#ff0000">

<center>
<form ENCTYPE="multipart/form-data" method="post" action="/cgi-bin/upload_archivo.cgi">
<input type="file" name="archivo" size="50"><input type="submit" value=" Enviar Archivo ">
</form>
</center>

</body>

</html>

Please compas si me pueden ayudar
Thanks
Mensaje Lun Nov 21, 2005 6:32 pm
kidd
Creador de Perl en Español
Creador de Perl en Español
Registrado: 15 Oct 2003
Mensajes: 1389
Ubicación: México
Responder citando

Hola:

Mira, el problema te lo tira porque no está pudiendo crear el archivo en el directorio que pones:

Código:

my $dir = "/htdocs/archivos";


Lo que me parece es que tiene que ver por el lugar donde tienes tu CGI, por ejemplo, si tu CGI lo tienes puesto en /htdocs/cgi-bin/upload_archivo.cgi, entonces la variable $dir debería de ser:

Código:

my $dir = "../archivos";


Otra cosa que puedes hacer es buscar cual es la ruta absoluta al directorio. Para ello te pido que hagas un CGI llamale env.cgi, ponle el siguiente código:

Código:

#!C:\perl\bin\perl.exe -w

use strict;

print "Content-type: text/html\n\n";

  print "$_ = $ENV{$_}<br>\n" foreach keys %ENV;


Súbelo a tu sitio ejecutalo y pon aquí el resultado para poder decirte cual es la ruta absoluta al directorio archivos.


SALUDOS
Mensaje Mar Nov 22, 2005 8:25 am
Jesusb0
Perlero Nuevo
Perlero Nuevo
Registrado: 20 Nov 2005
Mensajes: 5
Ubicación: Venezuela
Responder citando

buenas amigo, hice el cgi y el resultado es el siguiente:

Código:
QUERY_STRING =
SYSTEMROOT = C:\WINDOWS
SERVER_ADDR = 127.0.0.1
HTTP_ACCEPT_LANGUAGE = es-ar,es;q=0.8,en-us;q=0.5,en;q=0.3
SERVER_PROTOCOL = HTTP/1.1
HTTP_CONNECTION = keep-alive
SERVER_SIGNATURE =
Apache/2.0.55 (Win32) Server at localhost Port 80

COMSPEC = C:\WINDOWS\system32\cmd.exe
REMOTE_PORT = 3595
HTTP_USER_AGENT = Mozilla/5.0 (Windows; U; Windows NT 5.1; es-AR; rv:1.7.12) Gecko/20050919 Firefox/1.0.7
HTTP_ACCEPT = text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,*/*;q=0.5
GATEWAY_INTERFACE = CGI/1.1
HTTP_HOST = localhost
SERVER_ADMIN = jesusb0@detodobien.tk
SERVER_SOFTWARE = Apache/2.0.55 (Win32)
WINDIR = C:\WINDOWS
REMOTE_ADDR = 127.0.0.1
SCRIPT_NAME = /cgi-bin/env.cgi
HTTP_ACCEPT_ENCODING = gzip,deflate
SERVER_NAME = localhost
DOCUMENT_ROOT = C:/Archivos de programa/Apache Group/Apache2/htdocs
REQUEST_URI = /cgi-bin/env.cgi
HTTP_ACCEPT_CHARSET = ISO-8859-1,utf-8;q=0.7,*;q=0.7
REQUEST_METHOD = GET
SCRIPT_FILENAME = C:/Archivos de programa/Apache Group/Apache2/cgi-bin/env.cgi
HTTP_KEEP_ALIVE = 300
PATH = C:\WINDOWS\system32;C:\WINDOWS;C:\WINDOWS\System32\Wbem
PATHEXT = .COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;.WSH
SERVER_PORT = 80
Mensaje Mar Nov 22, 2005 5:09 pm
kidd
Creador de Perl en Español
Creador de Perl en Español
Registrado: 15 Oct 2003
Mensajes: 1389
Ubicación: México
Responder citando

Hola:

Muy bien, con la información que me das te debe de funcionar poniendo el siguiente directorio:

Código:

my $dir = "C:/Archivos de programa/Apache Group/Apache2/htdocs/archivos";



SALUDOS
Mensaje Mar Nov 22, 2005 5:43 pm
Jesusb0
Perlero Nuevo
Perlero Nuevo
Registrado: 20 Nov 2005
Mensajes: 5
Ubicación: Venezuela
Responder citando

Uff, muchas gracias compa, todo sirvio 100%, neta que te lo agradesco mucho, me haz salvado, ahora me toca buscar un comando para que me genere directamente la direccion donde se encuentra el archivo para bajarlo.
Lo que estoy haciendo es algo parecido a las paginas de upload como megaupload thanks
Mensaje Mar Nov 22, 2005 10:04 pm
kidd
Creador de Perl en Español
Creador de Perl en Español
Registrado: 15 Oct 2003
Mensajes: 1389
Ubicación: México
Responder citando

Jesusb0 escribió:
Uff, muchas gracias compa, todo sirvio 100%, neta que te lo agradesco mucho, me haz salvado, ahora me toca buscar un comando para que me genere directamente la direccion donde se encuentra el archivo para bajarlo.
Lo que estoy haciendo es algo parecido a las paginas de upload como megaupload thanks


No te preocupes, si necesitas más ayuda avísanos.


SALUDOS
Mensaje Mie Nov 30, 2005 8:43 am
macgregor
Perlero Frecuente
Perlero Frecuente
Registrado: 09 Dic 2004
Mensajes: 117
Ubicación: españa
seguridad Responder citando

Hola.
Ahora que te funciona, te recomiendo que añadas un par de comprovaciones paga ganar seguridad en tu cgi.

no cuesta nada comprovar que el tipo de archivo que suben es el que tu quieres y no algun archivo que se pueda ejecutar (cgi, php...)

Tambien te recomiendo que mires la configuracion del apache para limitar el tipo de archivos que pueden ejecutarse y el direcctorio en el que lo pueden hacer (limirarlo solo al directorio cgi-bin. por ejemplo)

Un saludo.
Mensaje Vie May 09, 2008 10:20 am
Razor
Perlero Nuevo
Perlero Nuevo
Registrado: 09 May 2008
Mensajes: 1
Responder citando

Buenas.

Necesito un upload en mi web.

Ya tengo los códigos pero cuando voy a subir archivos me pone error y me pide un archivo llamado upload.asp.

Ayudaaaa plis
Mensaje Vie May 09, 2008 12:09 pm
explorer
Moderador
Moderador
Registrado: 24 Jul 2005
Mensajes: 4129
Ubicación: Valladolid, España
Responder citando

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

No creo que upload.asp tenga algo que ver con Perl, pero bueno...

Lo más seguro es que tengas que hablar con el administrador de tu sitio web para saber qué sistemas de uploads puedes usar en tu sitio. O usar alguno de fábrica que ellos te den. O usar un cgi ya prefabricado, que parece que es lo que estás usando.

Lo que no nos dices es qué códigos estás usando. Y así es difícil dar pistas.

Puedes usar el sistema de búsqueda de este foro. Por ejemplo, buscando por 'upload' aparece un ejemplo sencillo con el módulo CGI:
http://perlenespanol.baboonsoftware.com/foro/viewtopic.php?t=1197

Y en la sección Tutoriales, hay uno llamado, precisamente, Upload de archivos.
Publicar nuevo tema   Responder al tema    Foros de discusión -> HTML Todas las horas son GMT - 6 Horas
Página 1 de 1



Powered by phpBB © 2001, 2005 phpBB Group