ics的httpcli怎么实现断点续传?(100分)

  • 主题发起人 主题发起人 superplayboy
  • 开始时间 开始时间
S

superplayboy

Unregistered / Unconfirmed
GUEST, unregistred user!
var
f:TSearchRec;


FindFirst(fname,faAnyFile,f);
httpcli1.ContentRangeBegin:=inttostr(f.Size);
httpcli1.ContentRangeEnd:='';
Httpcli1.RcvdStream:=TFileStream.Create(fname,fmOpenReadWrite);
httpcli1.url:='xxxxxxx';
httpcli1.Get;
Httpcli1.RcvdStream.Destroy;
Httpcli1.RcvdStream:= nil;
这段代码总是把后来的数据覆盖掉原来的数据,怎么回事?
 
httpcli好像不能断点续传
 
绝对是可以的,否则要ContentRangeBegin属性干嘛?
 
顶,高手哪去了?等着用啊
 
不是吧?没人理我?
 
新版本的ics是可以断点续传的,我做的程序就可以。

具体要看ics的例子,ftptst那个
 
mxn1,我用的是httpcli,不是FTP,看清题目
 
唉,算了,问题还是自己解决了,很简单,错在没有改文件指针,
将filestream.Position指到filestream.size即可,因为文件create时指针是在开头,应该
改成结尾才可以和原来的文件接起来

看来DFW的人气不行了,这么简单的问题放了几天还是没人管,可惜的是我的分又没了
 
superplayboy, 我的程序怎么不能端点续传呢 问题不在文件
因为每次都是从头开始的并没有 返回类似“Content-Range: bytes 190464-1787112/1787113”这样的东西

找来找去看到这个 如果谁能解答请帮助我哦

头:================================================
HEAD http://51e.5599.net/down/ HTTP/1.0
Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, */*
Referer: http://51e.5599.net/down/
User-Agent: Mozilla/3.0 (compatible)
Host: 51e.5599.net
Proxy-Authorization: Basic bGl1eTpsaXV5MTIz
Range: bytes=3-100

Get:================================================

GET http://51e.5599.net/down/ HTTP/1.0
Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, */*
Referer: http://51e.5599.net/down/
User-Agent: Mozilla/3.0 (compatible)
Host: 51e.5599.net
Proxy-Authorization: Basic bGl1eTpsaXV5MTIz

Receive:================================================

HTTP/1.0 200 OK
Server: Microsoft-IIS/5.0
Date: Tue, 05 Nov 2002 11:02:49 GMT
Content-Length: 50001
Content-Type: text/html
Set-Cookie: ASPSESSIONIDQQGGGZMC=AJKAOPKDENGENFHMKNENPMHC; path=/
Cache-Control: private
X-Cache: MISS from orange
Proxy-Connection: close

 
给你一段例程,照着样子画葫芦,自己想为什么
var
fstream:TFileStream;
............................
fstream:=TFileStream.Create('aa.zip',fmOpenReadWrite);//aa.zip文件是已经存在并且已经下载了一部分的文件
fstream.Position:=fstream.Size;
http2.ContentRangeBegin:=inttostr(fstream.Size);//下载的开始字节
http2.ContentRangeEnd:=''; //下载到文件结束
http2.RcvdStream:=fstream;
http2.url:='所下载文件的URL';
http2.Get;
fstream.Free;
 
可是我的怎么不行啊 我这段程序是仅仅下载从1M处开始下载的
*******************************
难道是因为是HTTP1.0的问题 有人说HTTP1.0不支持断点续传
不知道那个属性错了 还是什么 如何设置呢 那位高手请回答 :)

procedure TForm1.GetButtonClick(Sender: TObject);
var
FileName:String;
begin
HttpCli1.ContentRangeBegin := IntToStr(1024*1024);
HttpCli1.ContentRangeEnd := '';
GetButton.Enabled := FALSE;
HttpCli1.Head;
FileName:=HttpCli1.DocName;
FileName:='C:/'+FileName;
// if not FileExists(FileName) then
// FileClose(FileCreate(FileName));

HttpCli1.RcvdStream := TFileStream.Create(FileName, fmCreate);
// HttpCli1.RcvdStream := TFileStream.Create(FileName, fmOpenReadWrite);
// HttpCli1.ContentRangeBegin := IntToStr(HttpCli1.RcvdStream.Size);
// if HttpCli1.ContentRangeBegin='0' then HttpCli1.ContentRangeBegin:='';
// HttpCli1.RcvdStream.Seek(0,soFromEnd);

AbortButton.Enabled := TRUE;
InfoLabel.Caption := 'Loading';
try
try
HttpCli1.Get;
MemoRcv.Lines.Add(HttpCli1.RcvdHeader.Text);
InfoLabel.Caption := 'Received ' +
IntToStr(HttpCli1.RcvdStream.Size) + ' bytes';
except
on E: EHttpException do begin
InfoLabel.Caption := 'Failed : ' +
IntToStr(HttpCli1.StatusCode) + ' ' +
HttpCli1.ReasonPhrase;;
end
else
raise;
end;
finally
GetButton.Enabled := TRUE;
AbortButton.Enabled := FALSE;
HttpCli1.RcvdStream.Destroy;
HttpCli1.RcvdStream := nil;
end;
end;
 
哦 我的问题解决了 谢谢superplayboy了 不不过现在还没找到为什么错误呢
 
最后再打扰大家(能收到邮件的同志们)一下 我这里不能断点续传的问题是因为设置了NoCache属性成True了 为什么就不知道了 不管了 关键问题搞定了 回家吃饭去了 哈!!
 
多人接受答案了。
 
后退
顶部