• Publicidad

Error al descargar con archivos FTP con Perl

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

Error al descargar con archivos FTP con Perl

Notapor Skull118 » 2013-11-25 15:02 @668

Buenas tardes, nuevamente acudo a ustedes, compañeros, debido a que presento el siguiente inconveniente.

Desarrollé el siguiente script con un par de ejemplos, y todo bien; el único problema es que al descargar los archivos ".zip" al intentar abrir cualquier archivo (con winrar o winzip), me dice "Unexpected end of archive", y descargando el mismo archivo pero con filezilla no me da ningún inconveniente, y ambos son del mismo tamaño y extensión.

Aquí el script que utilizo:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. use Net::FTP;
  2. $ftp = Net::FTP->new("misitio", Debug => 0) or die "Imposible conectar al servidor misitio razon: $@";
  3. $ftp->login("usuario",'password') or die "No se puede loguear ", $ftp->message;
  4. open(A,"OBTENER.TXT"); #leo los archivos que necesito (esto me lo dá otro programa, solo contiene la fecha en formato YYYYMMDD=20131125)
  5. my @L=<A>;
  6. open(C, ">log_archivos.txt");
  7. foreach(@L){
  8.         $_=~s/\n//g;
  9.         my $path="/directorio_donde_estan_los_archivos/$_";
  10.         $ftp->cwd("$path") or die "Imposible cambiar al directorio", $ftp->message;    
  11.         @filelist = $ftp->ls("*.zip");
  12.         foreach(@filelist){
  13.                 print(C "$path/$_\n");
  14.                 $ftp->get("$_");
  15.         }
  16. }
  17. $ftp->quit;
  18. close A;
Coloreado en 0.003 segundos, usando GeSHi 1.0.8.4


Reitero, el script funciona para "bajar" los archivos, pero por alguna razón, me dan error al intentar abrirlos.

Aprovechando, ¿cómo puedo descomprimir los archivos .zip con Perl? Gracias de antemano.
Skull118
Perlero nuevo
Perlero nuevo
 
Mensajes: 53
Registrado: 2013-03-21 13:38 @610

Publicidad

Re: Error al descargar con archivos FTP con Perl

Notapor explorer » 2013-11-25 15:16 @677

No has activado el modo de transferencia en binario (binary()).

Para descomprimir archivos, hay unos cuántos módulos en CPAN. El más famoso es Archive::Zip (FAQ).
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

Re: Error al descargar con archivos FTP con Perl

Notapor Skull118 » 2013-11-25 15:58 @707

Active el modo binario y sigue dando el mismo error.


Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1.  
  2. use Net::FTP;
  3. $ftp = Net::FTP->new("misitio", Debug => 0
  4.                                 binary=> 1) or die "Imposible conectar al servidor misitio razon: $@";
  5. $ftp->login("usuario",'password') or die "No se puede loguear ", $ftp->message;
  6. open(A,"OBTENER.TXT"); #leo los archivos que necesito (esto me lo dá otro programa, solo contiene la fecha en formato YYYYMMDD=20131125)
  7. my @L=<A>;
  8. open(C, ">log_archivos.txt");
  9. foreach(@L){
  10.         $_=~s/\n//g;
  11.         my $path="/directorio_donde_estan_los_archivos/$_";
  12.         $ftp->cwd("$path") or die "Imposible cambiar al directorio", $ftp->message;    
  13.         @filelist = $ftp->ls("*.zip");
  14.         foreach(@filelist){
  15.                 print(C "$path/$_\n");
  16.                 $ftp->get("$_");
  17.         }
  18. }
  19. $ftp->quit;
  20. close A;
  21.  
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4


Lo probé tambien así y no deja de bajar los archivos sin error.



Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1.  
  2. use Net::FTP;
  3. $ftp = Net::FTP->new("misitio", Debug => 0) or die "Imposible conectar al servidor misitio razon: $@";
  4. $ftp->binary();
  5. $ftp->login("usuario",'password') or die "No se puede loguear ", $ftp->message;
  6. open(A,"OBTENER.TXT"); #leo los archivos que necesito (esto me lo dá otro programa, solo contiene la fecha en formato YYYYMMDD=20131125)
  7. my @L=<A>;
  8. open(C, ">log_archivos.txt");
  9. foreach(@L){
  10.         $_=~s/\n//g;
  11.         my $path="/directorio_donde_estan_los_archivos/$_";
  12.         $ftp->cwd("$path") or die "Imposible cambiar al directorio", $ftp->message;    
  13.         @filelist = $ftp->ls("*.zip");
  14.         foreach(@filelist){
  15.                 print(C "$path/$_\n");
  16.                 $ftp->get("$_");
  17.         }
  18. }
  19. $ftp->quit;
  20. close A;
  21.  
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4
Skull118
Perlero nuevo
Perlero nuevo
 
Mensajes: 53
Registrado: 2013-03-21 13:38 @610

Re: Error al descargar con archivos FTP con Perl

Notapor Skull118 » 2013-11-25 16:36 @733

Ya lo solucioné, era como me habías indicado, explorer; aquí está el código final:

Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. use Net::FTP;
  2. $ftp = Net::FTP->new( "misitio", Debug => 0 ) or die "Imposible conectar al servidor misitio razon: $@";
  3. $ftp->login( "usuario", 'password' ) or die "No se puede loguear ", $ftp->message;
  4. open( A, "OBTENER.TXT" ); # leo los archivos que necesito (esto me lo da otro programa, solo contiene la fecha en formato YYYYMMDD=20131125)
  5. my @L = <A>;
  6. open( C, ">log_archivos.txt" );
  7. foreach (@L) {
  8.     $_ =~ s/\n//g;
  9.     my $path = "/directorio_donde_estan_los_archivos/$_";
  10.     $ftp->cwd("$path") or die "Imposible cambiar al directorio", $ftp->message;
  11.     @filelist = $ftp->ls("*.zip");
  12.     foreach (@filelist) {
  13.         print( C "$path/$_\n" );
  14.         $ftp->binary();
  15.         $ftp->get("$_");
  16.     }
  17. }
  18. $ftp->quit;
  19. close A;
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4
Skull118
Perlero nuevo
Perlero nuevo
 
Mensajes: 53
Registrado: 2013-03-21 13:38 @610

Re: Error al descargar con archivos FTP con Perl

Notapor explorer » 2013-11-26 02:54 @162

Te vale con hacer el binary() una sola vez, después de la conexión.

Esta es mi versión:
Sintáxis: [ Descargar ] [ Ocultar ]
Using perl Syntax Highlighting
  1. #!/usr/bin/perl
  2. use v5.16;
  3. use Net::FTP;
  4. use autodie;
  5.  
  6. my $sitio = 'misitio';
  7. my $ftp   = Net::FTP->new( $stio, Debug => 0 )  or die "Imposible conectar al servidor $sitio: $@\n";
  8.  
  9. $ftp->login('usuario', 'password')              or die "No se puede entrar: ", $ftp->message;
  10. $ftp->binary();
  11.  
  12. open my $LOG,     '>', 'log_archivos.txt';
  13.  
  14. open my $ENTRADA, '<', 'OBTENER.TXT';           # formato YYYYMMDD=20131125
  15. while (<$ENTRADA>) {
  16.     chomp;
  17.  
  18.     my $path = "/directorio_donde_están_los_archivos/$_";
  19.  
  20.     $ftp->cwd($path)                            or die "Imposible cambiar al directorio $path: ", $ftp->message;
  21.  
  22.     for my $file ($ftp->ls('*.zip')) {
  23.         $ftp->get($file)                        or die "Error al obtener $file: ", $ftp->message;
  24.         say $LOG "$path/$file";
  25.     }
  26. }
  27. close   $ENTRADA;
  28. close   $LOG;
  29.  
  30. $ftp->quit;
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4
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 7 invitados

cron