当我们使用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;
}
}
这样就能达到我们要的效果了
转载于:https://blog.51cto.com/appleboyaug/1180102