flashget的一个bug解决方案,谁能通知作者修改,我给1000分,决不食言.来者有分.(100分)

  • 主题发起人 主题发起人 real_clq
  • 开始时间 开始时间
R

real_clq

Unregistered / Unconfirmed
GUEST, unregistred user!
to:
support@amazesoft.com <support@amazesoft.com>

您好,您写的flashget非常棒!我一直用。去年我在51.net申请了一个个人主
页,上传了一些个人软件。下载量都可以,但时间久了,下载的流量变大,当
51.net受不了时会返回它自己定义的页面,而这个页面,flashget当作了数据
一起加到下载后的文件中去了,这就导致了最终下载后得到的文件出错。这个
问题我下直在向51.net反应,但它们拒绝改变这种做法,所以我现在只能告诉
用户们只能用ie直接下载。:(
我想是否flashget能考虑一下这种情况下的解决方案?根据我对http协议的
了解,我认为以下的解决方案可行。并且通过了我自己写的下载小程序的测试,
方法如下:

首先判断文件所在服务器是否支持断点续传,(这点flashget早已实现)
其次分块下载文件时就会在返回的文件头中得到“Content-Range”标志
的,如“Content-Range: bytes 533200-533262/533263”,而不能下载时返回
的自定义页面中是不含有这个标志的。所以可以根据是否含有这个标志来决定
是否把数据加入到下载后的文件当中。
另外返回自定义文件的情况不只存在于51.net,在各个网站中都普遍存在
比如我经常下载一些文件,打开一看却是错误页面的提示。

万分希望您加上这个“文件是否有较”(暂时这样称呼它吧)功能。
 
为何不直接给作者写信?
 
写了,就是怕他太忙.所以才希望有人对他说一说.
 
你真牛,佩服,佩服。
 
直接跟作者说把,
 
前几天看见你跟DNChen联系过,
DNChen前辈是网络蚂蚁作者洪以容的朋友,
我想他们肯定都熟悉。如果您的想法很好的话
可以直接跟DNChen说。还有就是左轻侯大虾。
http://www.flashget.com/
 
帮你修E-mail一封过去,回答如下:


FlashGet是以第一次下载时收到的文件大小为准,如果第一次接受到的是正确的文件大小,在以后的续传
中如果返回错误的页面会判断大小并且不会添加到已下载的文件中,如果第一次返回的是错误提示页面就
会把这样的页面下载下来,设计上就是如此(因为还有一些用户很喜欢下载页面文件,如果不这样就无法支持)。
所以说如果下载的文件大小与原文件一致而错误应该不是您想象的原因,请告诉我具体的URL以便测试修改。谢谢。

-------------------------------------------------------
快速好用下载工具网际快车FlashGet(JetCar)--ZDNet五星级
最新版1.3 http://www.amazesoft.com
 
to:bubble兄,我和DNChen他们没谈好,因为他们没认真和我谈。可能是我水平问题吧。
所以......
唉,其实我自己很想找一个这样的工作,但和DNChen他们谈不下去,前天发了一封email
到博大的hr@bodaworld.com,好象也没什么回应,看来我与网络程序无缘了。

to:尘蓝兄,多谢呀多谢,我也收到了。明天中午我再发个更具体一些的方案,希望能完善的解决这个
问题。另外也请兄弟们想想是否有更好的解决方法?

 
以下是我发的第二封信,问题说明白了吧?兄弟们认为如何?
---------------
您好:

以下是请求一个txt文件后,服务器的回应的"头"部分,
--------------------------
HTTP/1.1 206 Partial Content
Date: Wed, 19 Jun 2002 01:31:14 GMT
Server: Apache/1.3.17 (Unix) PHP/4.0.4pl1 FrontPage/4.0.4.3
Last-Modified: Thu, 06 Jun 2002 13:14:15 GMT
ETag: "183ace-6160-3cff6027"
Accept-Ranges: bytes
Content-Length: 24928
Content-Range: bytes 0-24927/24928
Connection: close
Content-Type: text/plain
---------------------------------
可见就算是txt文件或html等可断点继传的
文件(可能必须是静态的)也是会返回"Content-Range"这一节,所以通过是否存在"Content-Range"
这一节来判断返回的信息是否有有较的可继传文件是可行的.并不会因为请求的是页面文件而有不同,
所以是不会造成"还有一些用户很喜欢下载页面文件,如果不这样就无法支持"这样的情况的.我自己写的
delphi的判断代码如下,
----------------------------
... ...
url1:=url1+#13#10;
ClientSocket1.Socket.SendText(url1);
while ClientSocket1.Active=true do
begin
cmd1:=socket_rec_line1(ClientSocket1.Socket,60*1000);
//是否可接收
if pos(lowercase('Content-Range:'),lowercase(cmd1))=1 then
begin
can_rec1:=true;
end;
//是否可接收_end;
//计算要接收的长度

if pos(lowercase('Content-Length: '),lowercase(cmd1))=1 then
begin
value1:=copy(cmd1,length('Content-Length: ')+1,length(cmd1));
reclen1:=strtoint(trim(value1));
end;
//计算要接收的长度_end;
if cmd1=#13#10 then break;
end;
real_reclen1:=0;
while ClientSocket1.Active=true do
begin
//不能接收则退出
if can_rec1=false then break;
zeromemory(@buf1,sizeof(buf1));
rec1:=ClientSocket1.Socket.ReceiveBuf(buf1,sizeof(buf1));
blockwrite(f1,buf1,rec1);
... ...
----------------------------
这是对可断点继传的文件而言的,如果文件(如asp)是不可断点继传,那么就用flashget原来的处理方式好了
加入这一项功能还是相当简单的.
错误文件的例子可见,(华军软件园)
http://www.onlinedown.net/textfile.htm

这个网页上的第一个下载链接是坏的文件,而"国内下载: clq.51.net "处的是好文件,您用ultraEdit比较
一下两个文件就知道文件损坏的原因就是自定义错误页面加入到下载文件所至.

 
我在开发自己的程序的在线升级功能时也发现类似的情况,有的网站有,有的没有。
但我已解决。
有bug当然直接向作者报告,作者不答复或不修改就是另外一回事了
 
不知是否请教一下hamsoft兄是怎么解决的?
 
这次作者没回信啦,怎办?
 
to: real_clq

如何实现断点续传和多线程下载

谢谢
 
to "别"兄,等我解决了这个问题再告诉你如何?
 
写一封信给他这个页面的连接看看
 

Similar threads

回复
0
查看
1K
不得闲
D
回复
0
查看
867
DelphiTeacher的专栏
D
D
回复
0
查看
836
DelphiTeacher的专栏
D
D
回复
0
查看
785
DelphiTeacher的专栏
D
后退
顶部