主要使用的是Delphi自带的TIdhttp控件。
一、界面设置
在窗体上放置两个TEdit控件,一个用于输入要下载的文件URL,一个用于输入要保存到本地的文件路径;放置两个TLabel控件,一个显示文件总大小,一个显示当前已下载大小;放置一个按钮TButton,一个TIdhttp控件(在Indy Clients面板)和一个TIdAntiFreeze控件(放置该控件可避免下载过程中程序无响应,在Indy Misc面板)。
二、主要代码
//1. 字节数转换为KB或MB字符串
function BytesToStr(iBytes: Integer): String;
var
iKb: Integer;
begin
iKb := Round(iBytes / 1024);
if iKb > 1000 then
Result := Format('%.2f MB', [iKb / 1024])
else
Result := Format('%d KB', [iKb]);
end;//2. Idhttp1控件的OnWorkBegin事件代码,用于获取文件总大小
procedure TForm1.IdHTTP1WorkBegin(Sender: TObject; AWorkMode: TWorkMode;
const AWorkCountMax: Integer);
begin
ProgressBar1.Max := aWorkCountMax;
Label2.Caption := BytesToStr(iWorkCountMax);
Update;
end;//3. Idhttp1控件的OnWork事件响应代码,用于更新文件下载进度
procedure TForm1.IdHTTP1Work(Sender: TObject; AWorkMode: TWorkMode;
const AWorkCount: Integer);
begin
Label1.Caption := BytesToStr(aWorkCount);
ProgressBar1.Position := aWorkCount;
Update;
end;//4. 按钮Button1的点击事件代码
procedure TForm1.Button1Click(Sender: TObject);
var
tStream: TMemoryStream;
begin
tStream := TMemoryStream.Create;
try
IdHTTP1.Get(Edit1.Text, tStream); //保存到内存流
tStream.SaveToFile(Edit2.Text); //保存为文件
ShowMessage('下载成功!');
except
ShowMessage('下载失败!');
end;
tStream.Free;
end;
以上代码在Delphi7编译环境下测试通过。