didReceiveBytes代理方法使用时注意事项

当我们使用asihttprequest做断点续传下载请求时,需要跟踪下载的速度,通常我们需要设置UIProgress的Delegate

[reqeust setDownloadProgressDelegate:self]; [request setAllowResumeForFileDownloads:YES];

然后调用-(void)request:(ASIHTTPRequest *)request didReceiveBytes:(longlong)bytes 跟踪下载进度。

我们可以在这个方法中:cursize = cursize + bytes;  跟踪当前下载的总大小,但是问题出现了,当由于特殊情况需要断点续传,重新发送请求时,我们会发现这里的bytes不在表示当前下载从服务器返回的数据大小,而是已经下载的总大小,所以如果此刻仍然用cursize = cursize + bytes就会发现cursize值非常大了,因为这里的bytes就是已经下载的文件的大小了。所以要做一些处理,经过研究,我的处理方式如下:


1. 在didReceiveResponseHeaders方法中标识一下是否是断点续传开始,因为header中会有一个参数“Content-Range”来标记

- (void)request:(ASIHTTPRequest *)request didReceiveResponseHeaders:(NSDictionary *)responseHeaders

   {

       DLog(@"收到header消息!");

       if ([[request responseHeaders] objectForKey:@"Content-Range"]) {

           isResumeFile = YES;

       } else {

           isResumeFile = NO;

       }

}

2. 在didReceiveBytes方法中进行赋值


-(void)request:(ASIHTTPRequest *)request didReceiveBytes:(longlong)bytes

{

       if (isResumeFile) {

           currentsize = bytes;

           isResumeFile = NO;

       } else {

           currentsize = currentsize + bytes;

       }

}

这样就能达到我们要的效果了



你可能感兴趣的:(ASIHTTPRequest,断点续传,didReceiveBytes)