您的位置:首页 > 移动开发 > IOS开发

iOS -- NSURLSession 实现断点下载

2016-02-29 00:00 549 查看
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

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



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

在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
{
//文
7fe0
件以字节为单位
//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];
}


这只是做了个小小的介绍,希望对有需要的童鞋有帮助。。。。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: