uses
Windows, Messages, ......, IdFTP, IdComponent;
Y creamos el procedimiento para descargar el archivo:
procedure DescargarArchivo( sArchivo: String );
var
FTP: TIdFTP;
begin
FTP := TIdFTP.Create( nil );
FTP.OnWork := FTPWork;
FTP.Username := 'usuario';
FTP.Password := 'miclave';
FTP.Host := 'miftp.midominio.com';
try
FTP.Connect;
except
raise Exception.Create( 'No se ha podido conectar con el servidor ' + FTP.Host );
end;
FTP.ChangeDir( '/misarchivos/copiaseguridad/' );
Antes de comenzar la descarga hay que averiguar el tamaño del archivo en el servidor:
Barra.Max := FTP.Size( ExtractFileName( sArchivo ) ) div 1024;
Donde Barra es un objeto TProgressBar que colocamos para mostrar al usuario el progreso de la descarga. Ahora nos aseguramos de que el archivo a descargar no haya sido descargado anteriormente, ya que podría producir un error:
if FileExists( sArchivo ) then
DeleteFile( sArchivo );
Para descargar el archivo utilizaremos el método Get, el cual toma como primer parámetro la ruta y nombre del archivo a descargar en local, como segundo parámetro el nombre que va a tener el archivo en el servidor, como tercer parámetro si deseamos añadir a un archivo ya existente y como último parámetro si deseamos la opción RESUME (en caso de interrumpirse la conexión si queremos que continue por donde iba, siempre y cuando el servidor soporte dicho modo).
FTP.Get( ExtractFileName( sArchivo ), sArchivo, False, False );
Para finalizar nos desconectamos del servidor y eliminamos el objeto.
FTP.Disconnect;
FTP.Free;
end;
También creamos el evento OnWork para controlar el progreso de la descarga:
procedure TFVentana.FTPWork( Sender: TObject; AWorkMode: TWorkMode; const AWorkCount: Integer );
begin
Barra.Position := AWorkCount div 1024;
end;
Para terminar recomiendo meter el método Get en un hilo de ejecución por si el componente se queda bloqueado en la descarga.
Pruebas realizadas en Delphi 7.
5 comentarios:
Fantastic work!! This information helps me a lot, really don't know how can I reward you for this thread (maybe if i let you touch my big tits cute boy ^^)
I'm sure you like it
excelente! Ayer encontré tu código y me fué de gran ayuda, muchas gracias
Me marca un error en ftpwork undeclared identifier
buenas amigo no entiendo como haces para poner en una ventana modal la barra y pasarle los paramestros del FTPWork, si puedes ser mas espesifico y al igualatas el FTP.OnWork:= FTPWork; no se porque te funciona asi si el eventro FTPWork hay que pasarle unos parametros y quedaria algo asi FTP.OnWork:=FTPWord("como pasas estas variables al evento para que las tome la barra de progreso");
Tengo un problema, cuando descarga el archivo dice: Connection Closed Gracefully. luego que doy Ok al mensaje lo termina de descargar, y si ya lo he descargado y hago nuevamente el proceso, dice: Destination file already exists.
Publicar un comentario