DELPHI TDownLoadURL下载网络文件

 
  1 unit Unit1;
  2 
  3 interface
  4 
  5 uses
  6   //引用   Vcl.ExtActns
  7   Vcl.ExtActns,
  8 
  9   System.SysUtils, System.Types, System.UITypes, System.Classes,
 10   System.Variants,
 11   FMX.Types, FMX.Graphics, FMX.Controls, FMX.Forms, FMX.Dialogs, FMX.StdCtrls,
 12   IdBaseComponent, IdComponent, IdTCPConnection, IdTCPClient, IdHTTP, FMX.Edit;
 13 
 14 type
 15   TForm1 = class(TForm)
 16     GroupBox1: TGroupBox;
 17     ProgressBar1: TProgressBar;
 18     Edit1: TEdit;
 19     GroupBox2: TGroupBox;
 20     Edit3: TEdit;
 21     Edit4: TEdit;
 22     Label1: TLabel;
 23     Label2: TLabel;
 24     Label3: TLabel;
 25     Button1: TButton;
 26     procedure Button1Click(Sender: TObject);
 27   private
 28     procedure URL_OnDownloadProgress(Sender: TDownLoadURL;
 29       Progress, ProgressMax: Cardinal; StatusCode: TURLDownloadStatus;
 30       StatusText: String; var Cancel: Boolean);
 31 
 32   public
 33     { Public declarations }
 34   end;
 35 
 36 var
 37   Form1: TForm1;
 38 
 39 implementation
 40 
 41 {$R *.fmx}
 42 var
 43   DownLoadURL1:TDownLoadURL;
 44 
 45 //url=网络文件  'http://helloroman.oicp.net:8000/test.rar';
 46 //Filename=保存到本地文件 'D:AdministratorDesktop123.rar';
 47 function DownLoadFile(url,Filename:string):boolean;
 48 var
 49   DownLoadURL1:TDownLoadURL;
 50 begin
 51     try
 52       DownLoadURL1:=TDownLoadURL.Create(Form1);
 53       DownLoadURL1.URL:= url;
 54       DownLoadURL1.Filename:= Filename;
 55       DownLoadURL1.OnDownloadProgress:=Form1.URL_OnDownloadProgress;
 56       DownLoadURL1.ExecuteTarget(nil);
 57       DownLoadURL1.Free;
 58       Result:=true;
 59     except
 60        Result:=false;
 61     end;
 62 end;
 63 
 64 
 65 procedure DownLoadThread;
 66 begin
 67   Form1.label3.Text:='0 kb / 0 kb';
 68 
 69   if DirectoryExists(ExtractFilePath(Form1.edit4.text)) then
 70   begin
 71        if not DownLoadFile(Form1.edit3.text,Form1.edit4.text) then
 72              Form1.GroupBox1.Text:='下载失败'
 73         else
 74            Form1.GroupBox1.Text:='下载完毕';
 75   end
 76   else
 77      SHowMessage(Form1.edit4.text + '不存在!');
 78 
 79 end;
 80 
 81 
 82 procedure TForm1.Button1Click(Sender: TObject);
 83 begin
 84      TThread.CreateAnonymousThread(DownLoadThread).Start;
 85 end;
 86 
 87 function BytesToStr(iBytes: Integer): String;
 88 var
 89   iKb: Integer;
 90 begin
 91   iKb := Round(iBytes / 1024);
 92   if iKb > 1000 then
 93     Result := Format('%.2f MB', [iKb / 1024])
 94   else
 95     Result := Format('%d KB', [iKb]);
 96 end;
 97 
 98 
 99 // 获取网络文件名
100 function GetUrlFileName(url:string):string;
101 var
102  str:string;
103 begin
104  url:=StringReplace(StrRScan(PChar(url),'/'), '/', '',[rfReplaceAll]);
105  if Pos('=',url) > 0 then
106     url:=StringReplace(StrRScan(PChar(url),'='), '=', '',[rfReplaceAll]);
107  Result:=url;
108 end;
109 
110 
111 
112 procedure TForm1.URL_OnDownloadProgress(Sender: TDownLoadURL;
113   Progress, ProgressMax: Cardinal; StatusCode: TURLDownloadStatus;
114   StatusText: String; var Cancel: Boolean);
115 begin
116 
117 
118   ProgressBar1.Max := ProgressMax div 100;
119   ProgressBar1.Value := Progress div 100;
120 
121 
122   Caption := StatusText;
123 
124   case StatusCode of
125     dsFindingResource:GroupBox1.Text:='查找资源...';
126     dsConnecting:GroupBox1.Text:='连接中...';
127     dsRedirecting:GroupBox1.Text:='';
128     dsBeginDownloadData:GroupBox1.Text:='准备下载文件...';
129     dsDownloadingData:GroupBox1.Text:='下载中...';
130 
131   end;
132 
133 
134   Edit1.Text:= Format('文件名:%s',[GetUrlFileName(Edit3.Text)]);
135   label3.Text := Format('%s / %s', [BytesToStr(Progress),BytesToStr(ProgressMax)]);
136 end;
137 
138 end.
View Code
原文地址:https://www.cnblogs.com/xe2011/p/3719454.html