IDHttp控件下载文件的问题。(55分)

  • 主题发起人 主题发起人 ildg
  • 开始时间 开始时间
I

ildg

Unregistered / Unconfirmed
GUEST, unregistred user!
我使用IDHttp下载某个文件,
该控件有个OnWork事件,
每次接收到数据时就会触发这个事件,
我想每次当IdHttp控件收到数据时取得此时收到的数据,
比如说这次IdHttp收到1000字节数据,
我就想获得这个数据,然后把它保存在文件里,
下次IDhttp又收到500字节数据,我又想取得这个数据,
然后作自己的处理。
每次都要获得数据的副本,
请问应该如何做?
我看它的源代码看了n长时间也没解决。
 
奇怪,IDHTTP有一个方法GET,它返回的就是它下载的东西吧.
 
可以先用
A:=IDHTTP.GET('地址').
然后再保存 A 不就可以了.
 
谢谢两位,
你们说的我都明白,
而我的意思你们都没明白。
 
想做断点续传?
 
是啊,呵呵,
用ics控件我已经实现了,
但我现在想改成indy,
因为indy可以控制下载的速度,
但我现在之发现indy只能用流作参数,
不能获取下载的数据,
无法自己对数据进行处理,
所以不能实现。
但是我想功能强大的indy肯定是可以实现我要的功能的,
只是我不知道怎么做而已,
所以我在这里求助啊,呵呵。
 
idhttp的方法嘛!
IdHTTP1.Head(URL);
再通过IdHTTP1.Response.RawHeaders.Values['Content-Length'];
取得文件大小与本地已经下载的数据进行比较
继续传时用
IdHTTP1.Request.CustomHeaders.Clear;
IdHTTP1.Request.CustomHeaders.Add('Range: bytes='+IntToStr(文件位置)+'-'#13#10);//从指定的位置下载数据
IdHTTP1.Get(URL,stream);
===============================================
 
感谢piao40993470,
您的最后一句是这样的:
IdHTTP1.Get(URL,stream);
里面有个stream,
如果一个文件只打开stream的话我知道怎么做,
我现在是要用多线程同时写一个文件,
怎么打开多个stream呢?
谢谢
 
那就用多个idhttp,然后分成多块下载,下载完成后再合并。((
 
那样不好,
flashget和nettransport以后任何一种下载工具如emule等都只用一个临时文件。
 
谢谢,问题解决了,
要改indy的源代码。
 
多人接受答案了。
 
后退
顶部