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
- iOS文件下载(二)
- iOS 多个文件下载和管理 (二)
- 文件下载(二)
- IOS文件的上传与下载(二)
- iOS网络--『文件下载、断点下载』的实现(二):NSURLSession
- PHP下载文件(二)
- iOS之文件上传、下载(下载)
- iOS开发网络篇—文件下载(二·合理)
- iOS开发网络篇—文件下载(二·合理)
- iOS中下载大型文件的原理解析二
- ios开发总结之文件下载(小文件下载)
- IOS开发总结之文件下载(大文件下载)
- iOS文件管理(二)
- 文件的上传与下载(二)
- 文件上传与下载(二)smartupload
- Java_文件上传与下载(二)
- C#分块下载文件实例(二)
- C# 文件下载(二)异步
- Redis常规的主从方案
- Bit String Reordering
- Android触摸屏事件派发机制详解与源码分析二(ViewGroup篇)
- WEB-INF目录下的jsp页面如何访问?
- JaveScript DOM操作之表格操作(1)
- iOS文件下载(二)
- [数学]齐次线性方程组的解、SVD、最小二乘法
- C/C++语言面试题详细解答三
- 队列的美
- windows3.0与OS/2兼容的DIB(BITMAPCOREHEADER结构解析)
- 最近生活感悟,我的选择与被选择
- Linux 下的网络负载监控工具
- 在Python中如何使用Linux的epoll
- Android Activity的生命周期