Как я могу скачать огромный файл через 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 это лучший выбор.

Другие вопросы по тегам