NSURLSession实现下载(代理)

NSURLSession实现下载(代理)

- (void)downloadTask2

{

{

NSURLSessionConfiguration
*cfg = [NSURLSessionConfiguration
defaultSessionConfiguration];

// 1.得到session对象

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

// 2.创建一个下载task

NSURL *url = [NSURL
URLWithString:@"http://localhost:8080/MJServer/resources/test.mp4"];

//    NSURLSessionDownloadTask *task = [session downloadTaskWithURL:url completionHandler:^(NSURL *location, NSURLResponse *response, NSError *error) {

//        NSLog(@"%@",location);

//    }];

NSURLSessionDownloadTask
*task = [session
downloadTaskWithURL:url];

// 3.开始任务

[task
resume];

//
如果给下载任务设置了completionHandler这个block,也实现了下载的代理方法,优先执行block

}

注意:

NSURLSessionDownloadTask下载完成之后,将数据保存在沙盒里面的tmp临时文件中,需要将临时文件将临时文件剪切或者复制Caches文件夹。

#pragma mark - NSURLSessionDownloadDelegate

/**


下载完毕后调用

*


@param
location    
临时文件的路径(下载好的文件)

*/

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

{

// location :
临时文件的路径(下载好的文件)

NSString *caches = [NSSearchPathForDirectoriesInDomains(NSCachesDirectory,
NSUserDomainMask,

YES)
lastObject];

// response.suggestedFilename

建议使用的文件名,一般跟服务器端的文件名一致

NSString *file = [caches
stringByAppendingPathComponent:downloadTask.response.suggestedFilename];

//
将临时文件剪切或者复制Caches文件夹

NSFileManager *mgr = [NSFileManager
defaultManager];

// AtPath :
剪切前的文件路径

// ToPath :
剪切后的文件路径

[mgr
moveItemAtPath:location.path
toPath:file
error:nil];

}

/**


恢复下载时调用

*/

- (void)URLSession:(NSURLSession
*)session downloadTask:(NSURLSessionDownloadTask
*)downloadTask didResumeAtOffset:(int64_t)fileOffset
expectedTotalBytes:(int64_t)expectedTotalBytes

{

}

/**


每当下载完(写完)一部分时就会调用(可能会被调用多次)

*


@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 progress = (double)totalBytesWritten
/ totalBytesExpectedToWrite;

NSLog(@"下载进度---%f",
progress);

}

时间: 2024-12-13 05:29:41

NSURLSession实现下载(代理)的相关文章

NSURLSession实现下载(不能看到下载进度)

NSURLSession实现下载(不能看到下载进度) /** *  下载任务:不能看到下载进度 */ - (void)downloadTask { // 1.得到session对象 NSURLSession *session = [NSURLSession sharedSession]; // 2.创建一个下载task NSURL *url = [NSURL URLWithString:@"http://localhost:8080/MJServer/resources/test.mp4&quo

Studio--代理设置(SDK下载代理设置)

为啥Android Studio有代理一说呢.比如我们要下载某个插件,但是这个插件又被tc墙了,所以这个时候需要FQ才能安装.FQ其中的一种方式就是使用VPN,配置如下图: 输入VPN的IP和PORT就可以了. 这里顺便也提下关于下载SDK build tools或者SDK Tools时,如何设置代理: 输入对应的IP和PORT即可.

NSURLSession下载文件-代理

- 3.1 涉及知识点 (1)创建NSURLSession对象,设置代理(默认配置) ```objc //1.创建NSURLSession,并设置代理 /* 第一个参数:session对象的全局配置设置,一般使用默认配置就可以 第二个参数:谁成为session对象的代理 第三个参数:代理方法在哪个队列中执行(在哪个线程中调用),如果是主队列那么在主线程中执行,如果是非主队列,那么在子线程中执行 */ NSURLSession *session = [NSURLSession sessionWit

iOS开发——网络Swift篇&NSURLSession加载数据、下载、上传文件

NSURLSession加载数据.下载.上传文件 NSURLSession类支持三种类型的任务:加载数据.下载和上传.下面通过样例分别进行介绍. 1,使用Data Task加载数据 使用全局的sharedSession()和dataTaskWithRequest方法创建. 1 func sessionLoadData(){ 2 //创建NSURL对象 3 let urlString:String="http://hangge.com" 4 var url:NSURL! = NSURL(

ios开发网络学八:NSURLSession相关代理方法

#import "ViewController.h" @interface ViewController ()<NSURLSessionDataDelegate> /** 接受响应体信息 */ @property (nonatomic, strong) NSMutableData *fileData; @end @implementation ViewController -(NSMutableData *)fileData { if (_fileData == nil)

Swift - 使用NSURLSession加载数据、下载、上传文件

NSURLSession类支持三种类型的任务:加载数据.下载和上传.下面通过样例分别进行介绍. 1,使用Data Task加载数据 使用全局的sharedSession()和dataTaskWithRequest方法创建. 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 func sessionLoadData(){     //创建NSURL对象     let urlString:String="http://hangg

使用 NSURLSession 开发一个支持后台下载和断点续传的下载工具

NSURLSession 是 iOS 系统提供给我们的原生网络操作库,它提供了网络操作相关的一系列特性支持,比如缓存控制,Cookie管理,HTTP 认证处理等等,是一套整体的网络操作处理解决方案. 关于 NSURLSession 的基本特性,我们之前的一篇文章 NSURLSession 网络库 - 原生系统送给我们的礼物 有过详细的介绍,如果大家之前没有使用过这个库,可以先参考一下这篇内容. 这次我们不介绍任何 NSURLSession 的基础概念,我们将以一个实际的下载工具 APP 开发来实

使用NSURLSessionDataTask实现大文件离线断点下载(完整)

6.1 涉及知识点 (1)关于NSOutputStream的使用 //1. 创建一个输入流,数据追加到文件的屁股上 //把数据写入到指定的文件地址,如果当前文件不存在,则会自动创建 NSOutputStream *stream = [[NSOutputStream alloc]initWithURL:[NSURL fileURLWithPath:[self fullPath]] append:YES]; //2. 打开流 [stream open]; //3. 写入流数据 [stream wri

IOS-网络(NSURLSession)

1 // 2 // ViewController.m 3 // NSURLSession 4 // 5 // Created by ma c on 16/2/1. 6 // Copyright © 2016年 博文科技. All rights reserved. 7 // 8 9 #import "ViewController.h" 10 11 @interface ViewController ()<NSURLSessionDownloadDelegate> 12 13