I'm currently trying to create a download manager with Synapse for an
application I'm creating. As the application may need to download many big
files from either ftp or http servers (it's a Linux package manager and a
graphical installer for a distribution I'm creating with friends), I need to
give good informations about download progress. The idea is to first get total
size of the files to download (URL will be in a string list) then really
downloads it (several downloads at a time if different servers/mirrors). The
TDownloadManager class I'm creating will deal with that automatically using
With HTTP my problem is that I can't find the way to get the size of the file
on the server while HTTPSend.DownloadSize is giving me the size of what have
Oppositely with FTP TFTPSend.GetFileSize is supposed to give me the total size
of the file but I can't find the way to get the downloaded size to give
> With HTTP my problem is that I can't find the way to get the size of the
> file on the server while HTTPSend.DownloadSize is giving me the size of
> what have been downloaded.
HTTP have a few ways how to download data. But not all ways know size of
data. For example, in chunked way you know size of next chunk only.
Remember your favourite web browser - sometimes it dowloading file, even
it does not shot full file size! Here it is same!
If filesize or at least next chuk size is known, then it is in
DownloadedSize property. It is designed for progress indicators.
However if you wish to know size of file o the server, try to ask you
HTTP server by HEAD method (instead of GIT) and analyze
THTTTPSend.Headers. See the Content-Length header.