:=
2
//设定断点续传的开始位置
IdHTTP.Request.ContentRangeEnd
:=
3
//设置传输的结束位置,为了以最快的速度返回结果,所以设定请求的总长度为1
if
IdHTTP.Response.ResponseCode
=
206
then
//根据返回代码判断是否支持断点续传
ShowMessage('该FTP站点支持断点续传。')elseShowMessage('该FTP站点不支持断点续传。')exceptendendvariValue:
Integerbeginwith
IdFTP
dotryif
Connected
then
Disconnect
Username
:=
'anonymous'
//这是FTP的用户名
Password
:=
'test@ftp.com'
//只是FTP的密码
Host
:=
'ftp.globalscape.com'
Port
:=
21ConnectexceptexitendtryiValue
:=
IdFTP.SendCmd('REST
1')
//发送指令判断是否支持断点续传
ShowMessage('该FTP站点支持断点续传。')elseShowMessage('该FTP站点不支持断点续传。')exceptendend
其实断点续传的原理很简单,就是在Http的请求上和一般的下载有所不同而已。打个比方,浏览器请求服务器上的一个文时,所发出的请求如下: 假设服务器域名为w ,文件名为down.zip。 GET /down.zip HTTP/1.1 Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms- excel, application/msword, application/vnd.ms-powerpoint, */* Accept-Language: zh-cn Accept-Encoding: gzip, deflate User-Agent: Mozilla/4.0 (compatibleMSIE 5.01Windows NT 5.0) Connection: Keep-Alive 服务器收到请求后,按要求寻找请求的文件,提取文件的信息,然后返回给浏览器,返回信息如下: 200 Content-Length=106786028 Accept-Ranges=bytes Date=Mon, 30 Apr 2001 12:56:11 GMT ETag=W/"02ca57e173c11:95b" Content-Type=application/octet-stream Server=Microsoft-IIS/5.0 Last-Modified=Mon, 30 Apr 2001 12:56:11 GMT
所谓断点续传,也就是要从文件已经下载的地方开始继续下载。
所以在客户端浏览器传给 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字节开始传,前面的字节不用传了。
服务器收到这个请求以后,返回的信息如下: 206 Content-Length=106786028 Content-Range=bytes 2000070-106786027/106786028 Date=Mon, 30 Apr 2001 12:55:20 GMT ETag=W/"02ca57e173c11:95b" Content-Type=application/octet-stream Server=Microsoft-IIS/5.0 Last-Modified=Mon, 30 Apr 2001 12:55:20 GMT 和前面服务器返回的信息比较一下,就会发现增加了一行: Content-Range=bytes 2000070-106786027/106786028 返回的代码也改为206了,而不再是200了。
知道了以上原理,就可以进行断点续传的编程了。
欢迎分享,转载请注明来源:夏雨云
评论列表(0条)