iOS -- NSURLSession 实现断点下载

iOS -- NSURLSession 实现断点下载

NSURLSession是iOS7中新的网络接口,它与咱们熟悉的NSURLConnection是并列的。在程序在前台时,NSURLSession与NSURLConnection可以互为替代工作。注意,如果用户强制将程序关闭,NSURLSession会断掉。

NSURLSession提供的功能:

1.通过URL将数据下载到内存

2.通过URL将数据下载到文件系统

3.将数据上传到指定URL

4.在后台完成上述功能


如果想更深入的了解NSURLSession  请点击 http://www.cocoachina.com/industry/20131106/7304.html


好啦!步入正题,断点下载的实现

iOS -- NSURLSession 实现断点下载_第1张图片











控件已经拖好,并且关联了点击事件,下面就是代码部分了。

  1. 在viewController.m 文件中声明属性

@property (nonatomic,strong) NSURLSessionDownloadTask *task;


    2.创建一个任务配置对象

    在viewDidLoad 中写入一下代码

 NSURLSessionConfiguration *configer = [NSURLSessionConfiguration defaultSessionConfiguration];
    
 NSURLSession *session = [NSURLSession sessionWithConfiguration:configer delegate:self delegateQueue:[NSOperationQueue mainQueue]];
 //这里设置代理了,所以需要去遵守两个协议  NSURLSessionDataDelegate,NSURLSessionDelegate
    
    NSURL *url = [NSURL URLWithString:@"http://uploads.mp3songurls.com/2930.mp3"];
    
    //创建下载任务
    self.task = [session downloadTaskWithURL:url];


    3.下载过程中需要实现代理的方法

#pragma mark 每下载完一部分 就会调用该方法   
- (void)URLSession:(NSURLSession *)session downloadTask:(NSURLSessionDownloadTask *)downloadTask
      didWriteData:(int64_t)bytesWritten
 totalBytesWritten:(int64_t)totalBytesWritten
totalBytesExpectedToWrite:(int64_t)totalBytesExpectedToWrite
{
    //文件以字节为单位
    //1.totalBytesExpectedToWrite 所需下载文件的总大小
    //2.totalBytesWritten 已经下载好部分的大小
    //3.bytesWritten 当前(本次)下载文件的大小
    self.progressView.progress = 1.0f * totalBytesWritten/totalBytesExpectedToWrite;
    NSLog(@"%.2f",self.progressView.progress);
    
}


    4.下载完成调用的方法

#pragma mark  下载完成的代理方法  
- (void)URLSession:(NSURLSession *)session downloadTask:(NSURLSessionDownloadTask *)downloadTask
didFinishDownloadingToURL:(NSURL *)location
{

    //打印一下沙盒地址,去沙盒里面查看下载好的文件
    NSLog(@"%@",NSHomeDirectory());
    
    //创建下载文件保存的路径,一般大文件都会保存在cache文件下
    NSString *cachePath = [NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES) firstObject];
    cachePath = [cachePath stringByAppendingPathComponent:@"111.mp3"];
    NSFileManager *manager = [NSFileManager defaultManager];
    //将下载好的文件移动到cache文件夹下,因为下载的文件,默认是在tmp目录下,这个目录最大的特点就是,一段时间之后,系统将对该文件下的文件做一个清理的操作,这是自动执行的
    [manager moveItemAtPath:location.path toPath:cachePath error:nil];
    
}


    5.开始下载的方法

#pragma mark 开始下载
- (IBAction)startDownloadDidClickedAction:(id)sender {
    [self.task resume];
}

    

    6.暂停下载

    

#pragma mark 暂停下载  
- (IBAction)stopButtonDIdClickedAction:(id)sender {
    [self.task suspend];
}



    这只是做了个小小的介绍,希望对有需要的童鞋有帮助。。。。





























你可能感兴趣的:(iOS -- NSURLSession 实现断点下载)