我们使用以下配置代码创建了会话。我把这个方法称为我创作的每个任务。
+(NSURLSession ) getNewSessionWithID:(NSString )sessionID delegateObject:(id)sender
{
NSURLSession *session;
NSURLSessionConfiguration *configuration = [NSURLSessionConfiguration backgroundSessionConfigurationWithIdentifier:sessionID];
NSOperationQueue *queue=[[NSOperationQueue alloc]init];
queue.maxConcurrentOperationCount=10;
queue.name=sessionID;
session = [NSURLSession sessionWithConfiguration:configuration delegate:sender delegateQueue:queue];
NSLog(@"Session ID :%@",session);
NSLog(@"QUEUE : %@",queue);
return session;
}
即使为多个任务创建了多个会话,也只有一个会话处于活动状态且只有一个任务正在执行,对于该任务,只有三个部分正在为该一个会话下载。
调用此方法来创建和启动下载任务。
-(void)DLRequestAllRenge:(NSMutableArray*)arrayrange andFileinfo:(FileInfo *)fileInfoObj
{
NSMutableArray *arrayAllParts=[[NSMutableArray alloc]init];
fileInfoObj.tempPath=[fileInfoObj UniqueFileName:[NSTemporaryDirectory() stringByAppendingString:[fileInfoObj.Name stringByDeletingPathExtension]]];
[self createTempDirectory:fileInfoObj.tempPath];
NSLog(@"REQ Session:%@",fileInfoObj.session);
for (int i=0; i<arrayrange.count; i++)
{
NSString *rangString = [arrayrange objectAtIndex:i];
NSMutableURLRequest *request=[[NSMutableURLRequest alloc] initWithURL:[NSURL URLWithString:fileInfoObj.URL]];
[request setValue:rangString forHTTPHeaderField:@"Range"];
NSString *fileName=[NSString stringWithFormat:@"%@(%d).data",[fileInfoObj.Name stringByDeletingPathExtension],i];
NSString *filePath=[fileInfoObj.tempPath stringByAppendingPathComponent:fileName];
FileInfo *subFileInfo=[[FileInfo alloc]init];
subFileInfo.URL=fileInfoObj.URL;
subFileInfo.Name=fileName;
subFileInfo.Path=filePath;
subFileInfo.Folder=[fileInfoObj getCurrentFolderName:filePath];
subFileInfo.Range=rangString;
subFileInfo.isDownloaded=NO;
subFileInfo.NSUrlSessionID=fileInfoObj.NSUrlSessionID;
subFileInfo.Progress=@"0";
subFileInfo.Priority=[NSString stringWithFormat:@"%d",i];
subFileInfo.fileDetail=@"Connecting...";
subFileInfo.fileStatus=RequestStatusDownloading;
subFileInfo.request=request;
subFileInfo.startTime=[NSDate date];
NSURLSessionDownloadTask *downloadTask = [fileInfoObj.session downloadTaskWithRequest:request];
downloadTask.taskDescription=filePath;
[downloadTask resume];
subFileInfo.DownloadTask=downloadTask;
[arrayAllParts addObject:subFileInfo];
}
fileInfoObj.parts=arrayAllParts;
[downloadingArray addObject:fileInfoObj];
[bgDownloadTableView reloadData];
}
第1期 为什么所有会话都不活跃?
第2期 为什么只下载一个任务和一个会话的三个部分?
我们有什么方法可以同时激活更多会话以供下载更多部分?
请帮我解决这个问题。任何帮助表示赞赏。
更新
我们可以使用上述代码下载数据,但问题是,当使用-suspend
或-cancel
停止任何下载任务时,我无法获取任何下载数据。
有什么方法可以检索原始数据而不是resumeData但是原始下载的数据?