Download file with callback
BlitzMax Forums/BlitzMax Programming/Download file with callback
| ||
The command CopyFile() can download a file from the internet and copy it to the user's hard drive. I want to write a new copyfile function with a callback, so that the download progress can be displayed: The problem is that a URL opened with ReadStream() has an unknown size. If I pre-cache the file with ReadFile(), the entire file is loaded, so I know the size, but I can't display the progress until after the actual file data is already downloaded. How can I find out the size of a file on the internet, or a stream opened with ReadStream()? |
| ||
a post by Yan sometime back, this will return the files size without downloading.Print HTTPFileSize("http://YOUR URL TO FILE") + " Bytes" End Function HTTPFileSize(url$) url$ = url$.Replace("http://", "") Local slashPos = url$.Find("/"), host$, file$ If slashPos <> -1 host$ = url$[..slashPos] file$ = url$[slashPos..] Else Return -1 EndIf Local stream:TStream=OpenStream("tcp::" + host$, 80) If Not stream Then Return -1 stream.WriteLine "HEAD " + file$ + " HTTP/1.0" stream.WriteLine "Host: " + host$ stream.WriteLine "" While Not Eof(stream) Local in$ = stream.ReadLine() If in$.Find("Content-Length:") <> -1 stream.Close() Return Int(in$[in$.Find(":") + 1..].Trim()) EndIf Wend stream.Close() Return -1 End Function |
| ||
Okay, this works. Now I just need to figure out how to stop the transfer if the connection is broken: |
| ||
Now this is cool. I fixed it so if you the connection is list, the function just returns false. And this will automatically detect and download app updates: |