如何通过 TIdHTTP 下载大文件?

2024-04-18

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

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 吗?提前致谢!


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

var
  s: TStream;

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

无论您在哪里打电话LoadFromFile or SaveToFile on a TMemoryStream,有可能TFileStream是一个更好的选择。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何通过 TIdHTTP 下载大文件? 的相关文章

随机推荐