断点续传

断点续传

 

HTTP头中一般断点下载时才用到RangeContent-Range

Range请求头当中使用   只有请求头中写了Range字段在响应端才会有Content-Range字段

Content-Range响应头当中使用

 

请求 

***********************************

GET  /test.rar  HTTP/1.1 

Connection:  close 

Host:  116.1.219.219 

Range:  bytes=0-100 

***********************************

Range的范围决定服务器提供客户端多少资源(0-100  第一个字节-第一101个字节的数据)

Range头域可以请求实体的一个或者多个子范围,Range的值为0表示第一个字节,也就是Range计算字节数是从0开始的

不写Range 会默认从第1个字节开始到最后

bytes=0-499   

bytes=500-999  

bytes=-500  最后500个字节   

bytes=500-   500开始到最后

bytes=0-0,-1    第一个与最后一个字节

bytes=500-600,601-999  

 

 

回应 

***********************************

不写Range字段  服务器的正常响应码200  写Range 206

 

HTTP/1.1 206 OK 

Content-Length:  801      

Content-Type:  application/octet-stream  

Content-Location: http://www.onlinedown.net/hj_index.htm

Content-Range:  bytes  0-100/2350  

Last-Modified: Mon, 16 Feb 2009 16:10:12 GMT

Accept-Ranges: bytes

Server: Microsoft-IIS/6.0

Date: Wed, 18 Feb 2009 07:55:26 GMT

***********************************

 

流程:写文件

didRece…  不断的写文件 追加写

发起请求前必须读取文件  上一次下了多少个字节(假设500个字节)

请求Range:bytes=500-    500读取

 

开始  暂停  按钮

断开网络连接  NSURLConnection connection;  [connection Cancel];

所有代理全部关闭     下次必须重新实例化请求  再次连接

 

 

  NSMutableURLRequest request [NSMutableURLRequest requestWithURL:nil];

    // RANGE字段

    [request addValue:@"bytes=%qu-“ forHTTPHeaderField:@"RANGE"];

    NSURLConnection connection nil;

    [connection cancel];

 

 

NSDictionary *dic [[NSFileManager defaultManagerattributesOfItemAtPath:_filePath error:nil];

        _curLen [dic[NSFileSizeunsignedIntegerValue];

可以通过这个方法来获取文件的大小

 

 

NSMutableURLRequest request [NSMutableURLRequest requestWithURL:];

    // RANGE字段

    [request addValue:@"bytes=%qu-“ forHTTPHeaderField:@"RANGE"];

    NSURLConnection connection ;

    [connection cancel];

通过这个方法来实现断点续传

 

@interface NSURLResponse NSObject <</SPAN>NSSecureCodingNSCopying>

(long long)expectedContentLength;

本次请求的资源总大小

断点续传就是剩下的部分的大小

 

多线程下载可以

用断点续传做

对于服务器对带宽做限制的时候  就可以用

 

asi提供了断点续传的功能

很好用  具体用法如下

request [ASIHTTPRequest requestWithURL:[NSURL URLWithString:@"http://dl_dir.qq.com/qqfile/qq/QQforMac/QQ_V2.4.1.dmg"]];

    request.delegate self;

    request.downloadProgressDelegate self;

    [request setDownloadDestinationPath:_filePath];

    [request setTemporaryFileDownloadPath:[NSString stringWithFormat:@"%@_temp",_filePath]];

    [request startAsynchronous];

[request cancelAuthentication];

遵守两个协议

@protocol ASIHTTPRequestDelegate <</SPAN>NSObject>

@protocol ASIProgressDelegate <</SPAN>NSObject>

 

常用代理方法:

(void)setProgress:(float)newProgress;

进度的代理

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值