Как я могу скачать огромный файл через TIdHTTP?
Я использую этот код для загрузки небольших файлов:
Var
ms:TMemoryStream;
begin
ms:=TMemoryStream.Create;
Idhttp1.get('http://mydomain.com/myfile.zip',ms);
ms.SaveToFile('myfile.zip');
ms.Free;
end;
Но файл сохраняется в оперативной памяти перед сохранением на диск, поэтому, например, загрузка файлов размером более 1 ГБ может быть затруднена. Есть ли способ скачать файл по его частям? Или мне нужно использовать WinInet? Заранее спасибо!
1 ответ
TMemoryStream
обеспечивает буфер в памяти, поэтому, если вы загружаете в него, вам нужно иметь достаточно памяти для хранения всего, что вы получаете. Это не единственный вид потока, хотя. Вы можете передать Get
Метод любого вида потока, который вы хотите, включая тот, который записывает свое содержимое на диск по мере его получения. использование TFileStream
, например.
var
s: TStream;
s := TFileStream.Create('myfile.zip', fmCreate);
try
IdHttp1.Get(..., s);
finally
s.Free;
end;
Куда бы вы ни позвонили LoadFromFile
или же SaveToFile
на TMemoryStream
возможно, что TFileStream
это лучший выбор.