function DescargarArchivo( sURL, sArchivoLocal: String ): boolean;
const BufferSize = 1024;
var
hSession, hURL: HInternet;
Buffer: array[1..BufferSize] of Byte;
LongitudBuffer: DWORD;
F: File;
sMiPrograma: String;
begin
sMiPrograma := ExtractFileName( Application.ExeName );
hSession := InternetOpen( PChar( sMiPrograma ), INTERNET_OPEN_TYPE_PRECONFIG, nil, nil, 0 );
try
hURL := InternetOpenURL( hSession, PChar( sURL ), nil, 0, 0, 0 );
try
AssignFile( F, sArchivoLocal );
Rewrite( F, 1 );
repeat
InternetReadFile( hURL, @Buffer, SizeOf( Buffer ), LongitudBuffer );
BlockWrite( F, Buffer, LongitudBuffer );
until LongitudBuffer = 0;
CloseFile( F );
Result := True;
finally
InternetCloseHandle( hURL );
end
finally
InternetCloseHandle( hSession );
end
end;
El primer parámetro es la URL completa del archivo a descargar y el segundo la ruta y nombre del archivo donde se va a guardar en nuestro disco duro. Un ejemplo de llamada a la función sería:
DescargarArchivo( 'http:\\miweb.com\imagen.jpg', 'C:\Mis documentos\imagen.jpg' );
Pruebas realizadas en Delphi 7.
2 comentarios:
¿Como puedo agregarle un ProgressBar?
¿Se puede saber el tamaño del archivo antes de descargar y sin tener que usar un componente extra?
Gracias y te felicito por toda la ayuda prestada.
Pues si te digo la verdad no se cual sería la función de la API de Windows que permite leer el tamaño de un archivo en una página web antes de descargarlo.
También depende si el servidor donde está alojado el archivo nos permite saber el tamaño del mismo.
Habrá que investigarlo. Si lo consigo lo pondré en este mismo post.
Saludos.
Publicar un comentario