iOS 使用NSURLSession下载大文件

Posted 1018475062

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了iOS 使用NSURLSession下载大文件相关的知识,希望对你有一定的参考价值。

 NSURLSession *session = [NSURLSession sharedSession];

    // 可以不用像connection一样用代理监听, 直接会下载文件, 但是无法获得下载的进度

    NSURLSessionDownloadTask *task =  [session

    downloadTaskWithURL:[NSURL URLWithString:@""]

     completionHandler:^(NSURL * _Nullable location, NSURLResponse * _Nullable response, NSError * _Nullable error) {

         // 文件存储的真实路径

         NSString *file = [[NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES) lastObject] stringByAppendingPathComponent:response.suggestedFilename];

         // 剪切location的临时文件到真实路径

         NSFileManager *mgr = [NSFileManager defaultManager];

         [mgr moveItemAtURL:location toURL:[NSURL fileURLWithPath:file] error:nil];

   }];

    [task resume];

///////////////////////////////////////////////////////////////////////////////////////////////////////////

// 遵搜三种协议 ,但是 最基本的哪一个 协议的继承性

@interface ViewController ()<NSURLSessionDataDelegate>// 继承子类就相当于继承了父类协议

@end

 //协议间的继承关系: <NSURLSessionDataDelegate>:<NSURLSessionTaskDelegate>:<NSURLSessionDelegate>

@implementation ViewController

 

- (void)viewDidLoad {

    [super viewDidLoad];

    // NSURLSession *session = [NSURLSession sharedSession];

    // session.delegate  = self; // 不能直接设置delegate是 readonly

    // 只能一开始的时候创建其代理

    NSURLSession *session = [NSURLSession sessionWithConfiguration:[NSURLSessionConfiguration defaultSessionConfiguration] delegate:self delegateQueue:[[NSOperationQueue alloc] init]];

 

    // 父协议,但是可以传入子协议:nullable id <NSURLSessionDelegate>

    NSURLSessionDownloadTask *task =  [session downloadTaskWithRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:@""]] completionHandler:^(NSURL * _Nullable location, NSURLResponse * _Nullable response, NSError * _Nullable error) {}];

    [task resume];

}

 // 代理方法

-(void)URLSession:(NSURLSession *)session dataTask:(NSURLSessionDataTask *)dataTask didReceiveResponse:(NSURLResponse *)response completionHandler:(void (^)(NSURLSessionResponseDisposition))completionHandler{

      // 要启动,否则无法下载

    completionHandler(NSURLSessionResponseAllow);// 允许 后再继续请求数

}

 -(void)URLSession:(NSURLSession *)session dataTask:(NSURLSessionDataTask *)dataTask didReceiveData:(NSData *)data{

}

 -(void)URLSession:(NSURLSession *)session task:(NSURLSessionTask *)task didCompleteWithError:(NSError *)error{

}

以上是关于iOS 使用NSURLSession下载大文件的主要内容,如果未能解决你的问题,请参考以下文章

在 iOS 中使用 NSUrlSession 一次下载 1 个文件

iOS NSURLSession 实现网络请求-文件下载-上传-后台下载

iOS NSURLSession 实现网络请求-文件下载-上传-后台下载

iOS开发之网络编程--2NSURLSessionDownloadTask文件下载

iOS开发系列-NSURLSession

使用 NSURLSession UploadTask 暂停、恢复、取消上传任务