5,388
社区成员
发帖
与我相关
我的任务
分享
var
IdHTTP: TIdHttp;
MemStream: TMemoryStream;
UrlStr, DFileName: string;
FilePosition: int64;
FileSize: Integer;
begin
IdHTTP := TIdHttp.Create(nil);
IdHTTP.ProtocolVersion := pv1_1;
// IdHttp.RecvBufferSize := 1024 ;
IdHTTP.HandleRedirects := true;
IdHTTP.ConnectTimeout :=60000;
IdHTTP.ReadTimeout :=60000;
IdAntiFreeze1.OnlyWhenIdle:=False;//设置使程序有反应.
lbl_error.Caption:='0';
tmr_dwonerror.Enabled :=true;
try
// 获取重定向后的下载地址和文件大小
IdHTTP.Head(FASrcURL);
FileSize := IdHTTP.Response.ContentLength;
if FileSize <= 0 then
exit;
{
DFileName := idhttp.URL.URI;
//由下载地址转换为保存文件名
while pos('/',DFileName) > 0 do
begin
delete(DFileName, 1, pos('/',DFileName));
end;
while pos('/',DFileName) > 0 do
begin
delete(DFileName, 1, pos('/',DFileName));
end;
if DFileName = '' then
exit;
}
FilePosition := 0;
MemStream := TMemoryStream.Create;
cxProgressBar1.Properties.Max :=FileSize;
while FilePosition < FileSize do
begin
// 方法1:未验证
// IdHttp.Request.ContentRangeStart := FilePosition;
// IdHttp.Request.ContentRangeEnd := FilePosition + 1024;
// 方法2:已验证
try
IdHTTP.Request.Range := IntToStr(FilePosition) + '-';
if FilePosition + 10240 < FileSize then
IdHTTP.Request.Range := IdHTTP.Request.Range +
IntToStr(FilePosition + 10239);
IdHTTP.get(IdHTTP.URL.URI, MemStream);
// MemStream.LoadFromStream(IdHttp.Response.ContentStream);
MemStream.SaveToFile(FASaveFileName);
FilePosition := MemStream.Size;
cxProgressBar1.Position := FilePosition;
Application.ProcessMessages;
except
exit;
end;
// sleep(50);
end;
tmr_dwonerror.Enabled :=false;
Result := true;
finally
IdHTTP.Free;
MemStream.Free;
cxProgressBar1.Position:=0;
end;