设置断点续传的思路:
1获取文件下载路径下的文件大小,如果大小大于0,说明文件已经接收过或者接收完成。文件大小等于0的情况,文件正常下载。
2改变请求数据的位置,从当前文件的末尾开始下载。
NSString *requestRange = [NSString stringWithFormat:@"bytes=%llu-", downloadedBytes];
[request setValue:requestRange forHTTPHeaderField:@"Range"];
3设置NSURLSession,准备下载。
NSURLSessionConfiguration *sessionConfiguration = [NSURLSessionConfiguration defaultSessionConfiguration];
NSOperationQueue *queue = [[NSOperationQueue alloc]init];
self.session = [NSURLSession sessionWithConfiguration:sessionConfiguration delegate:self delegateQueue:queue];
NSURLSessionDataTask *dataTask = [self.session dataTaskWithRequest:request];
[dataTask resume];
关于NSURLSession:NSURLSession的较详细教程
4此时数据开始下载,调用URLSession的delegate可以监听这个过程,因为数据是为一个个包的形式传输的(不知道理解的对不对),所以每次收到一个包需要移动节点到文件末尾然后继续写数据。
- (void)URLSession:(NSURLSession *)session dataTask:(NSURLSessionDataTask *)dataTask didReceiveData:(NSData *)data;
//向文件追加数据
NSFileHandle *fileHandle = [NSFileHandle fileHandleForUpdatingAtPath:self.targetPath];
[fileHandle seekToEndOfFile]; //将节点跳到文件的末尾
[fileHandle writeData:data];//追加写入数据
[fileHandle closeFile];
5通过比对本地路径的数据大小与要下载的文件大小,判断文件是否下载完成。
以下是一个大神在最近10月份写的断点续传类,写的很好也很详细,正在研究中。
参考自大神的断点续传博客
网友评论