您现在的位置:首页 >> 网络通讯 >> Indy >> 内容

Delphi中使用ICS实现多线程分块下载文件

时间:2011/9/3 15:47:04 点击:

  核心提示:现在的下载软件一般都是多线程,多资源的下载模式,本文用ICS中的TMultipartHttpDownloader组件实现多线程,单资源的分块下载模式,鲁大师的升级就是这样的原理,可以参考.先看组件的几...

现在的下载软件一般都是多线程,多资源的下载模式,本文用ICS中的TMultipartHttpDownloader组件实现多线程,单资源的分块下载模式,鲁大师的升级就是这样的原理,可以参考.

先看组件的几个事件:

HTTPRequestDone(Sender: TObject; ErrorCode: Integer; const Reason: string);

下载完成事件,在这里可以释放下载的文件流

  FMultiPartHTTP.FileStream.Free;
  FMultiPartHTTP.FileStream := nil;

HTTPShowStats(Sender: TObject);

下载显示状态信息事件

  '已下载(MB):' + Format('%2f',[FMultiPartHTTP.TotalCount / 1024 / 1024]) +
  ' 完成:' + Format('%3.0f', [FMultiPartHTTP.PercentDone])+'%' +
  ' 速度(KB/秒):' + Format('%6.2f', [FMultiPartHTTP.CurSpeed]) +
  ' 耗时:' + FormatDateTime('hh:nn:ss', FMultiPartHTTP.ElapsedTime);

下面2个事件和进度条有关,ICS自带了个下载进度条

HTTPProgressAddSegment(Sender: TObject; StartOffset, ASpan, InitPos: Int64);

ASpan分段大小,InitPos分段开始大小, StartOffset,分段开始大小

HTTPProgressSetPosition(Sender: TObject;Index: Integer; Position: Int64);

Index第几个分段 Position 分段已下载的大小

下面是用法,非常简单:

    FMultiPartHTTP.URL:=下载文件地址;
    FMultiPartHTTP.PartCount:=分块个数;
    FMultiPartHTTP.FileStream:=TFileStream.Create('下载本地文件名',fmCreate);
    FMultiPartHTTP.Start;

注意:PartCount要大于1,这个组件支持断网断点下载,如果要控制下载的线程数量需要改ICS的源代码

转载请注明来源,谢谢

作者:站长 来源:原创
  • 上一篇:没有了
  • 下一篇:Delphi中用HttpCli异步POST数据
  • 共有评论 0相关评论
    发表我的评论
    • 大名:
    • 内容:
    本类推荐
    • 没有
    本类固顶
    • 没有
  • 盒子文章(www.2ccc.com) © 2024 版权所有 All Rights Reserved.
  • 沪ICP备05001939号