Página 1 de 2

Upload de Archivos y HTML

NotaPublicado: 2005-11-20 22:35 @983
por Jesusb0
Hola buenas, queria que me ayudaran si pueden, acabo de leer un manual en http://perlenespanol.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

NotaPublicado: 2005-11-21 07:05 @337
por monoswim
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

NotaPublicado: 2005-11-21 12:46 @574
por Jesusb0
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

NotaPublicado: 2005-11-21 13:11 @591
por explorer39
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.

NotaPublicado: 2005-11-21 18:13 @800
por Jesusb0
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.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

NotaPublicado: 2005-11-21 19:32 @855
por kidd
Hola:

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

Código: Seleccionar todo
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: Seleccionar todo
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: Seleccionar todo
#!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

NotaPublicado: 2005-11-22 09:25 @434
por Jesusb0
buenas amigo, hice el cgi y el resultado es el siguiente:

Código: Seleccionar todo
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 = [email protected]
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

NotaPublicado: 2005-11-22 18:09 @798
por kidd
Hola:

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

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



SALUDOS

NotaPublicado: 2005-11-22 18:43 @822
por Jesusb0
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

NotaPublicado: 2005-11-22 23:04 @003
por kidd
Jesusb0 escribiste: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