Página 1 de 1

Transmisión de archivo Excel con Net::FTP

NotaPublicado: 2016-07-26 10:27 @477
por coltx
Hola, estimados. Tengo el siguiente script que envía a un FTP un archivo Excel, pero por alguna razón que desconozco el archivo Excel llega dañado, si bien llega con el peso correcto, al tratar de abrirlo dice que está dañado. Desde ya, muchas gracias por su ayuda.

#!/usr/bin/perl

use Net::FTP;
use Net::FTP::File;




my $ftp_site = '200.1.1.1';
my $port = '21';
my $ftp_dir = 'nuevo';
my $ftp_user = 'usuario';
my $ftp_password = 'password';
my $dir;
my $file;
my $dirOUT;

my $ftp = Net::FTP->new($ftp_site, Debug => 1, Port => $port, Passive => 0, Binary => 1)
or die "Cannot connect to host $@";
$ftp->binary();
$ftp->login($ftp_user, $ftp_password);
$ftp->cwd($ftp_dir);

$dir="/home/desarrollo/REPORTES/EXCEL/";
$dirOUT="/home/desarrollo/REPORTES/EXCEL/OUT";

opendir(DIR, $dir);
foreach $file (readdir(DIR))
{

if(($file ne ".") && ($file ne "..") && ($file ne "OUT"))
{

$ftp->put("$dir/$file",$file);
print "Transfer file: $file\n";
}


}





$ftp->quit();

Re: Transmisión de archivo Excel con Net::FTP

NotaPublicado: 2016-07-26 12:34 @565
por explorer
La opción Binary, en el new(), no existe (no aparece en el manual), así que creo que te la has inventado ;)

De forma correcta activas la opción binary(), así que la transmisión es correcta.

Yo no veo errores en el código.

Ya que tienes activada la opción de Debug, sería interesante ver la salida de depuración, al menos, del primer archivo, para ver si ocurre algo inesperado.

Re: Transmisión de archivo Excel con Net::FTP

NotaPublicado: 2016-08-05 14:07 @630
por coltx
explorer: esto es lo que arroja con el Debug => 1. Gracias

Sintáxis: [ Descargar ] [ Ocultar ]
Using text Syntax Highlighting
Net::FTP>>> Net::FTP(2.79)
Net::FTP>>>   Exporter(5.71)
Net::FTP>>>   Net::Cmd(2.30)
Net::FTP>>>   IO::Socket::INET(1.35)
Net::FTP>>>     IO::Socket(1.38)
Net::FTP>>>       IO::Handle(1.35)
Net::FTP=GLOB(0x3778a78)<<< 220 Bienvenido Server FTP DEVELOP.
Net::FTP=GLOB(0x3778a78)>>> TYPE I
Net::FTP=GLOB(0x3778a78)<<< 530 Please login with USER and PASS.
Net::FTP=GLOB(0x3778a78)>>> USER usuario
Net::FTP=GLOB(0x3778a78)<<< 331 Please specify the password.
Net::FTP=GLOB(0x3778a78)>>> PASS ....
Net::FTP=GLOB(0x3778a78)<<< 230 Login successful.
Net::FTP=GLOB(0x3778a78)>>> CWD /
Net::FTP=GLOB(0x3778a78)<<< 250 Directory successfully changed.
Net::FTP=GLOB(0x3778a78)>>> PASV
Net::FTP=GLOB(0x3778a78)<<< 227 Entering Passive Mode (210,17,172,11,61,62)
Net::FTP=GLOB(0x3778a78)>>> STOR REPORTE.xls
Net::FTP=GLOB(0x3778a78)<<< 150 Ok to send data.
Net::FTP=GLOB(0x3778a78)<<< 226 Transfer complete.
Net::FTP=GLOB(0x3778a78)>>> QUIT
Net::FTP=GLOB(0x3778a78)<<< 221 Goodbye.
Coloreado en 0.000 segundos, usando GeSHi 1.0.8.4

Re: Transmisión de archivo Excel con Net::FTP

NotaPublicado: 2016-08-05 15:54 @704
por explorer
Disculpa, pero esa no es la salida que corresponde a tu programa.

Lo sé porque pone

Net::FTP=GLOB(0x3778a78)<<< 227 Entering Passive Mode (210,17,172,11,61,62)

es decir, que has activado el modo pasivo, pero eso no concuerda con la opción Passive => 0 de tu código.

En cuanto a la transmisión en modo binario, debería salir una línea parecida a esta:

Net::FTP=GLOB(0x3778a78)<<< 200 TYPE is now 8-bit binary

Prueba con algo muy sencillo, por ejemplo con algo que empiece así:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. #!/usr/bin/env perl                  
  2. use Net::FTP;
  3.  
  4. my $ftp = Net::FTP->new(
  5.     'servidor',
  6.     Debug       => 1,
  7.     Passive     => 0,
  8. )
  9. or die "Cannot connect to host: $@\n";
  10. $ftp->login('usuario', 'contraseña');
  11. $ftp->binary();
  12. $ftp->close();
Coloreado en 0.003 segundos, usando GeSHi 1.0.8.4

Re: Transmisión de archivo Excel con Net::FTP

NotaPublicado: 2016-08-08 16:33 @731
por coltx
explorer, con tu script obtengo esto:

Net::FTP>>> Net::FTP(2.79)
Net::FTP>>> Exporter(5.71)
Net::FTP>>> Net::Cmd(2.30)
Net::FTP>>> IO::Socket::INET(1.35)
Net::FTP>>> IO::Socket(1.38)
Net::FTP>>> IO::Handle(1.35)
Net::FTP=GLOB(0xcdfc10)<<< 220 Bienvenido Server FTP.
Net::FTP=GLOB(0xcdfc10)>>> USER prueba
Net::FTP=GLOB(0xcdfc10)<<< 331 Please specify the password.
Net::FTP=GLOB(0xcdfc10)>>> PASS ....
Net::FTP=GLOB(0xcdfc10)<<< 230 Login successful.
Net::FTP=GLOB(0xcdfc10)>>> TYPE I
Net::FTP=GLOB(0xcdfc10)<<< 200 Switching to Binary mode.

Re: Transmisión de archivo Excel con Net::FTP

NotaPublicado: 2016-08-10 07:32 @355
por explorer
De acuerdo: el usuario se registra y se cambia al modo de transmisión binaria.

Ahora falta enviar el documento. Y comprobar que tiene la misma longitud tanto en origen como en destino.

Re: Transmisión de archivo Excel con Net::FTP

NotaPublicado: 2016-08-24 12:43 @571
por coltx
Solucionado.... tenía que colocar el binary() después del login(), es decir:

$ftp->login($ftp_user, $ftp_password);
$ftp->binary();
$ftp->cwd($ftp_dir);