如何通过TIdHTTP下载大文件?

时间:2013-03-13 11:16:37

标签: delphi delphi-xe2 wininet indy10

我使用此代码下载小文件:

Var
 ms:TMemoryStream;
begin
  ms:=TMemoryStream.Create;
  Idhttp1.get('http://mydomain.com/myfile.zip',ms);
  ms.SaveToFile('myfile.zip');
  ms.Free;
end;

但是文件在存储到磁盘之前保存在RAM中,因此可能难以下载文件> 1Gb,例如。有没有办法按部件下载文件?或者我需要使用WinInet吗?提前谢谢!

1 个答案:

答案 0 :(得分:12)

TMemoryStream提供内存缓冲区,因此如果您下载到一个缓冲区,则需要有足够的内存来容纳您收到的所有内容。但它并不是唯一的流。您可以将Get方法传递给您想要的任何类型的流,包括在收到它时将其内容写入磁盘的流。例如,使用TFileStream

var
  s: TStream;

s := TFileStream.Create('myfile.zip', fmCreate);
try
  IdHttp1.Get(..., s);
finally
  s.Free;
end;

您在LoadFromFile上致电SaveToFileTMemoryStream的任何地方,TFileStream可能是更好的选择。