加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

使用Delphi和Indy,使用Progress事件以编程方式从Internet下载文

发布时间:2020-12-15 10:05:24 所属栏目:大数据 来源:网络整理
导读:我需要一种使用Delphi通过HTTP从Internet下载文件的方法, 包括Progress事件,我正在寻找一种使用Indy组件的方法. 我使用的是Delphi 7. 提前致谢. 解决方法 我已经编写了这个例子,只用一个HTTP GET,与Indy 10,希望它与Indy 9一起工作: uses {...} IdHTTP,IdCo
我需要一种使用Delphi通过HTTP从Internet下载文件的方法,
包括Progress事件,我正在寻找一种使用Indy组件的方法.

我使用的是Delphi 7.

提前致谢.

解决方法

我已经编写了这个例子,只用一个HTTP GET,与Indy 10,希望它与Indy 9一起工作:
uses
  {...} IdHTTP,IdComponent;

type
  TFormMain = class(TForm)
    {...}
  private
    {...}
    procedure HttpWork(ASender: TObject; AWorkMode: TWorkMode; AWorkCount: Int64);
  end;
{...}

procedure TFormMain.Button1Click(Sender: TObject);
var
  Http: TIdHTTP;
  MS: TMemoryStream;
begin
  Http := TIdHTTP.Create(nil);
  try
    MS := TMemoryStream.Create;
    try
      Http.OnWork:= HttpWork;

      Http.Get('http://live.sysinternals.com/ADExplorer.exe',MS);
      MS.SaveToFile('C:ADExplorer.exe');

    finally
      MS.Free;
    end;
  finally
    Http.Free;
  end;
end;

procedure TFormMain.HttpWork(ASender: TObject; AWorkMode: TWorkMode; AWorkCount: Int64);
var
  Http: TIdHTTP;
  ContentLength: Int64;
  Percent: Integer;
begin
  Http := TIdHTTP(ASender);
  ContentLength := Http.Response.ContentLength;

  if (Pos('chunked',LowerCase(Http.Response.TransferEncoding)) = 0) and
     (ContentLength > 0) then
  begin
    Percent := 100*AWorkCount div ContentLength;

    MemoOutput.Lines.Add(IntToStr(Percent));
  end;
end;

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读