Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Internet (https://www.clubdelphi.com/foros/forumdisplay.php?f=3)
-   -   descargar desde ftp (https://www.clubdelphi.com/foros/showthread.php?t=88196)

lgarcia 27-04-2015 20:11:52

descargar desde ftp
 
Hola:

Estoy haciendo un proyecto donde necesito descargar un fichero desde un sitio ftp y me recomendaron el IdFTP de la paleta Indy del Deplhi 7 que es el que estoy utilizando pero nunca he trabajado con ese componente. Vi que tiene entre otras propiedades el Host, username y password pero como logro pasarle el nombre del fichero que quiero y descargarlo en una direccion determinada.

Saludos
Luis

ecfisa 27-04-2015 21:02:25

Hola lgarcia.

Revisa este enlace: Descargando archivos por FTP con INDY

Saludos :)

nlsgarcia 27-04-2015 21:12:26

lgarcia,

Cita:

Empezado por lgarcia
...un proyecto donde necesito descargar un fichero desde un sitio ftp y me recomendaron el IdFTP de la paleta Indy del Deplhi 7...

:rolleyes:

Revisa esta información:
Espero sea útil :)

Nelson.

lgarcia 27-04-2015 21:48:46

descargar desde ftp
 
gracias ecfisa por la pronta respuestaestoy haciendo pruebas con el codigo y te comentare luego

Saludos
Luis

lgarcia 27-04-2015 22:08:01

descargar desde ftp
 
cuando compilo me esta dando el error en la instruccion: FTP.Get( ExtractFileName(sArchivo), sArchivo, False, False);

Project Actual.exe raised exception class EidProtocolReplayError with Message 'PORT/EPRT (active mode/extended active mode) is not supported use PASV/EPSV instead of this.

Saludos
Luis

lgarcia 27-04-2015 23:12:31

descargar desde ftp
 
La sentencia FTP.ChangeDir(''); se refiere al directorio donde esta el archivo en el FTP?

Saludos
Luis

ecfisa 28-04-2015 02:14:21

Hola lgarcia.
Cita:

Empezado por lgarcia (Mensaje 491745)
cuando compilo me esta dando el error en la instruccion: FTP.Get( ExtractFileName(sArchivo), sArchivo, False, False);

Project Actual.exe raised exception class EidProtocolReplayError with Message 'PORT/EPRT (active mode/extended active mode) is not supported use PASV/EPSV instead of this.

¿ Podrías copiar y pegar aquí el código que estás empleando ?

Cita:

Empezado por lgarcia (Mensaje 491747)
La sentencia FTP.ChangeDir(''); se refiere al directorio donde esta el archivo en el FTP?

Si, el método ChangeDir cambia el directorio en el servidor FTP.

Saludos :)

Neftali [Germán.Estévez] 28-04-2015 10:44:54

En el club, si utilizas la búsqueda, puedes encontrar varios ejemplos de cómo realizar esto.
Sin ir más lejos, aquí tienes uno de Nelson donde se pueden ver las operaciones más básicas a realizar en un FTP con el componente idFTP.

Aunque si buscas un poco encontrará más...

lgarcia 28-04-2015 13:21:45

descargar desde ftp
 
El codigo que estoy usando es este:
Código Delphi [-]
procedure TFormMain.FTPWork(Sender: TObject; AWorkMode: TWorkMode;
  const AWorkCount: Integer);
begin
  Barra.Position := AWorkCount div 1024;
end;

procedure DescargarArchivo(sArchivo: String);
var
  FTP: TIdFTP;
  cad: string;
begin
  FTP := TIdFTP.Create(nil);
  FTP.OnWork := FormMain.FTPWork;
  FTP.Username := 'admin';
  FTP.Password := '123';
  FTP.Host := 'www.apocalipsi.com';

  try
    FTP.Connect;
  except
    raise Exception.Create( 'No se ha podido conectar con el servidor ' + FTP.Host);
  end;

  FTP.ChangeDir('/Update/');

  FormMain.Barra.Max := FTP.Size(ExtractFileName(sArchivo)) div 1024;

  if FileExists(sArchivo) then DeleteFile(sArchivo);

  cad:= sArchivo;

  FTP.Get(ExtractFileName(sArchivo), sArchivo, False, False);

  FTP.Disconnect;
  FTP.Free;
end;

procedure TFormMain.FormActivate(Sender: TObject);
begin
  DescargarArchivo('Programa.exe');
  Close;
  WinExec(PChar('Programa.exe'),SW_SHOWNORMAL);
end;

end.

Saludos
Luis

ecfisa 28-04-2015 13:57:43

Hola lgarcia.

Acabo de probar el código que adjuntaste y si bién no me permite conectar con el servidor, no lanza la excepción que mencionas en el mensaje #5. ¿ Sigue mostrándote ese mensaje o ya está solucionado ?

Saludos :)

lgarcia 28-04-2015 14:00:34

descargar desde ftp
 
socio, sigue tirandome el mensaje.

Saludos
Luis

Neftali [Germán.Estévez] 28-04-2015 14:12:42

Prueba a realizar la transferencia en modo pasivo.

Código Delphi [-]
  ...
  FTP.Passive := True;
  ...

ecfisa 28-04-2015 15:02:16

Hola de nuevo.

No se que decirte por que no he recibido nunca ese error que aparenta ser de protocolo.

Como dato adicional, con tus valores y quitando el try/except obtengo el error: Socket error #10060 Connection timed out, que normalmente es debido a que el cliente no recibe respuesta del servidor.

Olvidé mencionarte que también puedes poner el componente en tiempo de diseño y los valores de sus propiedades desde el Object Inspector, ahorrándote el código de inicialización.

Y por último me queda sugerirte que intentes de este modo:
Código Delphi [-]
uses Urlmon;

procedure DownloadFile(const url, target: string);
begin
  URLDownloadToFile(nil, PChar(url), PChar(target), 0, nil);
end;

Ejemplo de uso:
Código Delphi [-]
...
begin
   DownloadFile('ftp://ftp.freenet.de/pub/filepilot/ss_sa', 'c:\tmp\ss_sa');
...

Saludos :)

Edito: No había visto el mensaje de Neftali pero seguramente ajustando esa propiedad desaparezca la excepción.

lgarcia 28-04-2015 15:30:59

descargar desde ftp
 
Con la recomendacion de Neftali de FTP.Passive := True; se resolvio el problema. Parece que era un problema de protocolo.

Muchas gracias por su colaboracion y el tiempo empleado.

Saludos
Luis


La franja horaria es GMT +2. Ahora son las 11:08:53.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi