iOS文件下载(二)

来源:互联网 发布:网速数据控制器 编辑:程序博客网 时间:2024/05/16 05:33

  • 使用NSURLSession
  • 写在前面
  • NSURLSession基本使用
  • NSURELSession代理方式下载
    • NSURLSession常用代理方法
  • NSURLSession断点下载

使用NSURLSession

写在前面

NSURLSession是iOS7之后推出的网络操作工具类。主要目的是替换NSURLConnection。

NSURLSession基本使用

    //1. 获取NSURLSession对象    NSURLSession *sesion = [NSURLSession sharedSession];    //2. 创建URL    NSURL *url = [NSURL URLWithString:@""];    //3. 创建任务    NSURLSessionDownloadTask *task = [sesion downloadTaskWithURL:url completionHandler:^(NSURL *location, NSURLResponse *response, NSError *error) {        // 1. location->下载完后临时文件的位置,如果不进行任何操作,程序结束后会删除此下载的文件        //将文件剪切到缓冲文件        NSString *caches = [NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES) lastObject];        NSString *file = [caches stringByAppendingPathComponent:response.suggestedFilename];        NSFileManager *manager = [NSFileManager defaultManager];        [manager moveItemAtPath:location.path toPath:file error:nil];        NSLog(@"下载完毕%@", response);    }];    //4. 开始任务    [task resume];

NSURELSession代理方式下载

//1. 创建NSURLSessionConfiguration对象    NSURLSessionConfiguration *cfg = [NSURLSessionConfiguration defaultSessionConfiguration];    //2. 创建NSURLSession对象并设置代理<NSURLSessionDownloadDelegate>    NSURLSession *session = [NSURLSession sessionWithConfiguration:cfg  delegate:self delegateQueue:[NSOperationQueue mainQueue]];    //3. 创建URL    NSURL *url = [NSURL URLWithString:@""];    //4. 创建下载任务    NSURLSessionDownloadTask *task = [session downloadTaskWithURL:url];/*     //注意:如果给下载任务设置了completionHandler这个block,也实现了代理方法,优先使用代理方法     NSURLSessionDownloadTask *task = [session downloadTaskWithURL:url completionHandler:^(NSURL *location, NSURLResponse *response, NSError *error) {    }];*/    //5. 实现下代理方法

NSURLSession常用代理方法

/** *  完成下载 * *  @param session *  @param downloadTask *  @param location    下载文件的临时路径 */- (void)URLSession:(NSURLSession *)session downloadTask:(NSURLSessionDownloadTask *)downloadTask didFinishDownloadingToURL:(NSURL *)location{    //建议文件名   // downloadTask.response.suggestedFilename;}/** *  恢复下载 * *  @param session *  @param downloadTask *  @param fileOffset *  @param expectedTotalBytes */-(void)URLSession:(NSURLSession *)session downloadTask:(NSURLSessionDownloadTask *)downloadTask didResumeAtOffset:(int64_t)fileOffset expectedTotalBytes:(int64_t)expectedTotalBytes{}/** *  下载完一部分时就会调用 * *  @param session *  @param downloadTask *  @param bytesWritten              本次调用写了多少 *  @param totalBytesWritten         已经写了多少 *  @param totalBytesExpectedToWrite 文件总大小 */-(void)URLSession:(NSURLSession *)session downloadTask:(NSURLSessionDownloadTask *)downloadTask didWriteData:(int64_t)bytesWritten totalBytesWritten:(int64_t)totalBytesWritten totalBytesExpectedToWrite:(int64_t)totalBytesExpectedToWrite{    //下载进度    //(double)totalBytesWritten / totalBytesExpectedToWrite;}

NSURLSession断点下载

//下载任务对象@property (nonatomic, strong)NSURLSessionDownloadTask *task;//暂停下载后返回的数据信息,包含了下载的位置,恢复下载时将此信息传递过去就会接着下载@property (nonatomic, strong)NSData *resumeData;//NSURLSession对象@property (nonatomic, strong)NSURLSession *session;/** *  暂停/开始按钮响应事件 * *  @param sender */- (void)btnAction:(UIButton*)sender{    if (self.task == nil) { //如果下载任务为空,开始下载或者恢复下载,否则暂停下载        if(self.resumeData){//如果暂停后返回的信息为空,开始下载,否则恢复下载            [self resume];        }else{            [self start];        }    }else{        [self pause]; //zt    }}- (void)resume{    //恢复下载    self.task = [self.sessin downloadTaskWithResumeData:self.resumeData];    [self.task resume];    self.resumeData = nil;}
0 0
原创粉丝点击