所谓断点续传,也就是要从文件已经下载的地方开始继续下载。所以在客户端浏览器传给
Web服务器的时候要多加一条信息--从哪里开始。
下面是用自己编的一个"浏览器"来传递请求信息给Web服务器,要求从2000070字节开始。
GET /down.zip HTTP/1.0
User-Agent: NetFox
RANGE: bytes=2000070-
Accept: text/html, image/gif, image/jpeg, *; q=.2, */*; q=.2
仔细看一下就会发现多了一行RANGE: bytes=2000070-;这一行的意思就是告诉服务器down.zip这个文件从2000070字节开始传,前面的字节不用传了。
上面是网上看的。。 关于【RANGE: bytes=2000070-】 中的2000070是如何获取的???例如一个文件下载一半,停止了,
再下载时,是先读取本地文件的大小,然后把该大小传递给服务器???

解决方案 »

  1.   

    我觉得应该是这样的, 把文件用InputStream读取,获取size(), 然后放入一个新的输出流, 已经下载的先放入其中,然后再接收新下载的,提示服务器从size()+1位置开始读取
      

  2.   

    感觉不是,程序是支持的。断点续传是服务器支持,服务器应该会保存一个文件,标记你的机器标识(可能是IP或者mac地址)和下载进度。应该很多在大学里面管理过校园网的都知道。
      

  3.   


    String range = request.getHeader("range");
    然后再截取
      

  4.   

    Sorry! 会错意.
    --------------------------断点续传都是客户端在每次请求完成或断开后,想办法记录已下载区段,续传时计算出未下载区段,分别请求服务器继续下载数据
    至于使用什么手段记录已下载区段,就看你自己设计了 (或者建立数据库文件进行记录, 或者在下载中的临时文档中划出约定好的区域,或者)
    各种下载客户端所采用的手段也各不相同
    比如:用迅雷下载一半的数据,再想用快车续传,呵呵 (看它俩以后是否愿意兼容对方 并且 对方是否愿意被自己兼容了)
    --------------------------需要注意的是,并不是所有服务器支持断点续传有的服务器可能不理会你在请求头部发出的 range 信息
    有的服务器可能理会了你在请求头部发出的 range 信息,但没能够返回正确的数据这需要客户端程序进行检测验证一般是多发几个请求进行检测验证, 比如:
    先发送 "range:0-" 的请求,从服务端返回的响应信息头中获得  Content-Length 和具体响应返回的数据
    再多发几个不同的 "range:start-end" 请求, 继续从服务端返回的响应信息头中获得  Content-Length 和具体响应返回的数据
    通过计算比较,验证服务端的返回信息是否正确以此来判断服务器是否支持断点续传