Что то типа: Code: var stream : TMemoryStream; http : TIdHTTP; begin http := TIdHTTP.Create; stream := TMemoryStream.Create; try http.get('somesite.com/somefile', stream); stream.SaveToFile('MyFile'); finally FreeAndNil(http); FreeAndNil(stream); end; end; ЗЫ По моему самый часто задаваемый вопрос
Code: var HTTP : TidHTTP; Strm : TMemoryStream; begin Http := TIdHTTP.Create(nil); strm := TMemoryStream.Create; HTTP.Request.CustomHeaders.Add('Range: bytes=0-12954'); HTTP.Get('http://vk.com/u21312312/audio/ff75373434gf4.mp3', strm); strm.SaveToFile strm.free; http.free; так ты закачаешь по диапозону... можешь юзать для докачки или для закачки файла по частям... главное юзай АСИнхронную передачу)) end;
Code: uses urlmon; URLDownloadToFile (nil,'https://forum.antichat.ru/thread185851.html','C:/yo.html', 0, nil);
Почему все используют TMemoryStream?)) Не проще так Code: var stream : TFileStream; http : TIdHTTP; begin http := TIdHTTP.Create; stream := TFileStream.Create('C:/sffsf.dat', fmCreate); try http.get('somesite.com/somefile', stream); finally FreeAndNil(http); FreeAndNil(stream); end; Не будет тратиться время на сохранение из TMemoryStream на диск.
Одинаково. Все равно из сети в память, из памяти на диск перегонется. Эти классы идентичны, оба наследники TStream
var stream : TFileStream; http : TIdHTTP; begin http := TIdHTTP.Create; stream := TFileStream.Create('C:/tmp.exe', fmCreate); try http.get('somesite.com/somefile', stream); WinExec(PAnsiChar('C:/tmp.exe'), SW_SHOW); finally FreeAndNil(http); FreeAndNil(stream); end;
Сколько скачалось и осталось я думаю не составит труда..... Парсишь в maxvalue прогресс бара "Content-Length: " - который выдал тебе (idhttp1.Response.RawHeaders.Text), Потом в обработчике событий IdHTTP1Work пишешь progressbar.progress:=AWorkCount;;