NSURLSession之下载

作者: Serafina_f898 | 来源:发表于2017-05-09 14:46 被阅读0次

    1:首先就是下载图片

    NSURLSessionConfiguration * config=[NSURLSessionConfiguration defaultSessionConfiguration];

    //创建一个session

    NSURLSession * session=[NSURLSession sessionWithConfiguration:config];

    NSURL * url =[NSURL URLWithString:urlString];

    //创建一个任务请求到data数据然后将其转化成图片

    NSURLSessionDataTask * dataTask=[session dataTaskWithURL:url completionHandler:^(NSData * _Nullable data, NSURLResponse * _Nullable response, NSError * _Nullable error) {

    self.imageView.image=[UIImage imageWithData:data];

    }];

    [dataTask resume];

    2:主要谈一下一些比较大的文件的下载

    其实有很多第三方库集成的很好,用法就不多说了,这里主要用系统自带的URLSession进行文件的下载

    1:首先我们需要遵循NSURLSessionDownloadDelegate代理,因为要用到其代理方法获取当前进度以及结束等状态

    2接着我们根据网址创建一个NSURL,然后创建Session的配置信息,接着就是创建Session,遵循其代理,然后执行下载任务。

    -(void)loadFileWithUrl:(NSString *)str

    {

    NSURL * url =[NSURL URLWithString:str];

    NSURLSessionConfiguration * config =[NSURLSessionConfiguration defaultSessionConfiguration];

    NSURLSession *session= [NSURLSession sessionWithConfiguration:config delegate:self delegateQueue:[NSOperationQueue mainQueue]];

    NSURLSessionDownloadTask* downloadTask = [session downloadTaskWithURL:url];

    [downloadTask resume];

    }

    3:其实主要处理还是在代理方法中

    -(void)URLSession:(NSURLSession *)session downloadTask:(NSURLSessionDownloadTask *)downloadTask didFinishDownloadingToURL:(NSURL *)location{

    }

    这是结束的代理方法,这里主要处理下载结束后我们要进行的操作

    - (void)URLSession:(NSURLSession *)session downloadTask:(NSURLSessionDownloadTask *)downloadTask    didWriteData:(int64_t)bytesWritten     totalBytesWritten (int64_t)totalBytesWritten totalBytesExpectedToWrite:(int64_t)totalBytesExpectedToWrite

    {

    self.myPregress.progress = (double)totalBytesWritten/totalBytesExpectedToWrite;

    self.pgLabel.text = [NSString stringWithFormat:@"下载进度:%f",(double)totalBytesWritten/totalBytesExpectedToWrite];

    }

    这个是程序正在下载的代理方法,我们可以从其中获取到当前的进度

    参数*  @param bytesWritten              这次写入的大小

    *  @param totalBytesWritten        已经写入沙盒的大小

    *  @param totalBytesExpectedToWrite 文件总大小

    - (void)URLSession:(NSURLSession *)session downloadTask:(NSURLSessionDownloadTask *)downloadTask

    didResumeAtOffset:(int64_t)fileOffset

    expectedTotalBytes:(int64_t)expectedTotalBytes

    {

    }这个就是当前的下载任务暂停后回复下载后调用的方法

    3:下载的暂停回复

    1:暂停

    __weak typeof(self) selfVc = self;

    [self.downloadTask cancelByProducingResumeData:^(NSData *resumeData) {

    //  resumeData : 包含了继续下载的开始位置\下载的url

    selfVc.resumeData = resumeData;

    selfVc.downloadTask = nil;

    }];

    主要就是将当前已经下载的resumeData存储下来,然后将downloadTask置为nil

    2:回复

    // 传入上次暂停下载返回的数据,就可以恢复下载

    self.downloadTask = [self.session downloadTaskWithResumeData:self.resumeData];

    [self.downloadTask resume]; // 开始任务

    self.resumeData = nil;

    相关文章

      网友评论

        本文标题:NSURLSession之下载

        本文链接:https://www.haomeiwen.com/subject/phobtxtx.html