分享

idhttp续传问题

 quasiceo 2014-07-09

idhttp续传问题

2009-06-03 00:44:56 来自:clliu 浏览数:26
procedure Tf_rardown.HttpDownLoad(aURL, aFile: string; bResume: Boolean);
var
  mid_path :string;
  Size:integer;
  fs,ms: TMemoryStream;
  tStream,tempStream: TFileStream;

begin //Http方式下载
 
  IDHttp1.HandleRedirects  :=  True;
  IDHttp1.ReadTimeout  :=  60000;
  mid_path:= ExtractFilepath(Application.ExeName)+'download\'+'mid.rar';

  if FileExists(aFile) then //如果文件已经存在
  begin
    tStream := TFileStream.Create(aFile, fmOpenReadWrite);
  end
    else
  begin
    tStream := TFileStream.Create(aFile, fmCreate);
   
  end;


  try
  if bResume then //续传方式
  begin
 
    tempStream:=TFileStream.Create(mid_path, fmCreate);

    // tempStream.Seek(0,soFromEnd);
 
  //  tempStream.CopyFrom(tStream,tStream.size);
    //tempStream.Free;
    IdHTTP1.Head(aURL);
    IdHTTP1.Request.ContentRangeStart := tStream.Size -1;
    tStream.Position := tStream.Size - 1 ; //移动到最后继续下载


    IdHTTP1.Request.ContentRangeEnd :=  IdHTTP1.Response.ContentLength ;
    pro_num    := tStream.Size ;
   
    IdHTTP1.Get(aURL, tStream); //开始下载
   
    // tStream.Free;
   
  //  tStream:= TFileStream.Create(aFile, fmOpenWrite);
  //  tempStream:= TFileStream.Create(mid_path,fmOpenRead);
  //  tStream.Seek(0,soFromEnd);
  // tStream.CopyFrom(tempStream,tempStream.Size);
  //Size:=tempStream.Size+SizeOf(Size);
  //tStream.WriteBuffer(Size,SizeOf(Size));
  //tempStream.Free;
   
  end
  else //覆盖或新建方式
  begin
    IdHTTP1.Request.ContentRangeStart := 0;
    IdHTTP1.Get(aURL, tStream); //开始下载

  end;
      //showmessage('下载失败!');
  finally
  tStream.Free;
  end;
end;

这是网上找的,下载一个rar文件,续传后后可以解压,但是里面老是丢失一部分内容
 
vivan回复于03日02点54分 
gz
 
方妈妈回复于03日03点05分 
各位大哥大姐帮帮忙了
 
白碧苒回复于03日03点19分 
  原来顺序是这样的,但是结果是只能下载从断点处到最后的文件流
    IdHTTP1.Request.ContentRangeStart := tStream.Size -1;
    tStream.Position := tStream.Size - 1 ; //移动到最后继续下载


    IdHTTP1.Request.ContentRangeEnd :=  IdHTTP1.Response.ContentLength ;
    pro_num    := tStream.Size ;
    IdHTTP1.Head(aURL);
    IdHTTP1.Get(aURL, tStream); //开始下载
 
lverrushui回复于03日03点29分 
IdHTTP1.Head(aURL);
放到
IdHTTP1.Request.ContentRangeStart := tStream.Size -1;
上面文件大小没问题,但是解压后里面文件不全

如果是这样
    IdHTTP1.Request.ContentRangeStart := tStream.Size - 1;
    tStream.Position := tStream.Size - 1; //移动到最后继续下载
    IdHTTP1.Head(aURL);
    IdHTTP1.Request.ContentRangeEnd := IdHTTP1.Response.ContentLength;
文件是ContentRangeStart 到 ContentRangeEnd 的部分
 
taoqi回复于03日03点37分 
文件大小有没有问题?

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多