NSURLSession下载文件-代理

- 3.1 涉及知识点

(1)创建NSURLSession对象,设置代理(默认配置)

```objc
 //1.创建NSURLSession,并设置代理
    /*
     第一个参数:session对象的全局配置设置,一般使用默认配置就可以
     第二个参数:谁成为session对象的代理
     第三个参数:代理方法在哪个队列中执行(在哪个线程中调用),如果是主队列那么在主线程中执行,如果是非主队列,那么在子线程中执行
     */
    NSURLSession *session = [NSURLSession sessionWithConfiguration:[NSURLSessionConfiguration defaultSessionConfiguration] delegate:self delegateQueue:[NSOperationQueue mainQueue]];
```

(2)根据Session对象创建一个NSURLSessionDataTask任务(post和get选择)

//创建task
NSURL *url = [NSURL URLWithString:@"http://120.25.226.186:32812/resources/images/minion_01.png"];

//注意:如果要发送POST请求,那么请使用dataTaskWithRequest,设置一些请求头信息
NSURLSessionDataTask *dataTask = [session dataTaskWithURL:url];

(3)执行任务(其它方法,如暂停、取消等)

    //启动task
    [dataTask resume];
    //其它方法,如取消任务,暂停任务等
    [dataTask cancel];
    [dataTask suspend];

(4)遵守代理协议,实现代理方法(3个相关的代理方法)

1.当接收到服务器响应的时候调用
     session:发送请求的session对象
     dataTask:根据NSURLSession创建的task任务
     response:服务器响应信息(响应头)
     completionHandler:通过该block回调,告诉服务器端是否接收返回的数据
-(void)URLSession:(nonnull NSURLSession *)session dataTask:(nonnull NSURLSessionDataTask *)dataTask didReceiveResponse:(nonnull NSURLResponse *)response completionHandler:(nonnull void (^)(NSURLSessionResponseDisposition))completionHandler

 2.当接收到服务器返回的数据时调用
 该方法可能会被调用多次
-(void)URLSession:(nonnull NSURLSession *)session dataTask:(nonnull NSURLSessionDataTask *)dataTask didReceiveData:(nonnull NSData *)data

 3.当请求完成之后调用该方法
 不论是请求成功还是请求失败都调用该方法,如果请求失败,那么error对象有值,否则那么error对象为空
-(void)URLSession:(nonnull NSURLSession *)session task:(nonnull NSURLSessionTask *)task didCompleteWithError:(nullable NSError *)error

(5)当接收到服务器响应的时候,告诉服务器接收数据(调用block)

    默认情况下,当接收到服务器响应之后,服务器认为客户端不需要接收数据,所以后面的代理方法不会调用
    如果需要继续接收服务器返回的数据,那么需要调用block,并传入对应的策略

    /*
        NSURLSessionResponseCancel = 0, 取消任务
        NSURLSessionResponseAllow = 1,  接收任务
        NSURLSessionResponseBecomeDownload = 2, 转变成下载
        NSURLSessionResponseBecomeStream NS_ENUM_AVAILABLE(10_11, 9_0) = 3, 转变成流
    */

    completionHandler(NSURLSessionResponseAllow);
时间: 2024-10-14 10:23:36

NSURLSession下载文件-代理的相关文章

iOS 使用NSURLSession下载大文件

NSURLSession *session = [NSURLSession sharedSession]; // 可以不用像connection一样用代理监听, 直接会下载文件, 但是无法获得下载的进度 NSURLSessionDownloadTask *task =  [session downloadTaskWithURL:[NSURL URLWithString:@""] completionHandler:^(NSURL * _Nullable location, NSURLR

iOS中利用NSURLSession进行文件断点下载

第一部分 知识储备 1.对NSURLSesiion的认识 NSURLSesiion是苹果在iOS7推出的一个类,它具备了NSURLConnection所具备的方法,同时也比它更强大.苹果推出它的目的大有取代NSURLConnection的趋势或者目的. 2.  NSURLSesiion的作用 实现对文件的下载与上传.在NSURLSesiion中,任何请求都可以被看做是一个任务.而NSURLSesiionData 有两个子类:NSURLSessionDownlaodTask实现文件下载和NSURL

nginx反向代理下载文件失败处理

最近遇到了客户在从我们的服务器下载文件失败时的情况.然后把解决方案一并整理一下以备后续.需要说明的是,我们前端都是使用nginx来做反向代理,后面的逻辑处理采用php的方式. 1.缓存目录不可写 nginx在做反向代理,代理后端的nginx+php-fpm时,在客户端下载文件时,总是下载到一定的大小,就下载不动,查看后端服务器,表现正常,在绕过前端反向代理,直接从后端下载,也正常.检查反向代理服务器日志,抛出如下异常: 2017/01/16 11:54:38 [warn] 3748#0: *61

ios开发网络学习十二:NSURLSession实现文件上传

#import "ViewController.h" // ----WebKitFormBoundaryvMI3CAV0sGUtL8tr #define Kboundary @"----WebKitFormBoundaryjv0UfA04ED44AhWx" #define KNewLine [@"\r\n" dataUsingEncoding:NSUTF8StringEncoding] @interface ViewController ()&l

NSURLSession下载

#import "HMViewController.h" @interface HMViewController () <NSURLSessionDownloadDelegate> @end @implementation HMViewController - (void)viewDidLoad { [super viewDidLoad]; } // 任务:任何请求都是一个任务 // NSURLSessionDataTask : 普通的GET\POST请求 // NSURL

网络篇----NSURLSession下载篇

NSURLSession 是苹果官方推出替代NSURLConnection的一个值 NSURLSession 是ios7推出,ios6是不支持这个参数的,如果使用下载大文件的话 可以使用这个,以下是使用NSURLSession 代理和 未代理的两个事例,不使用 NSURLSessionDownloadDelegate 这个代理方法的,是不显示下载的进度. #import "HMViewController.h" @interface HMViewController () <NS

NSURLSession下载和断点续传

NSURLSession是iOS7之后新的网络接口,和经常用到NSURLConnection是类似的.在程序在前台时,NSURLSession与NSURLConnection可以相互的替代.但是当用户在对程序进行强制关闭的时候此时NSURLSession会默认的自动断开.相比而言NSURLSession的优势主要体现在后台操作时候,而且在最流行的框架AFNetworking中也对NSURLSession提供了更好的支持. 主要提供的功能如下: 1 下载文件到内存中 2 下载文件到路径 3 上传制

通过Java WebService接口从服务端下载文件

一. 前言 本文讲述如何通过webservice接口,从服务端下载文件.报告到客户端.适用于跨系统间的文件交互,传输文件不大的情况(控制在几百M以内).对于这种情况搭建一个FTP环境,增加了系统部署的复杂度和系统对外暴露的接口.通过在服务端读取文件,返回字节流到客户端的方式比较简单. 下面采用restful的接口形式,满足SOA架构接口要求.如下代码拷贝到eclipse中即可运行,功能自测试运行正常.样例代码的服务端和客户端在同一台PC上运行,放到不同PC上运行改一下发布服务和请求服务的IP地址

向云服务器上传下载文件方法汇总(转)

转载于:https://yq.aliyun.com/articles/64700 摘要: 一.向Windows服务器上传下载文件方式 方法有很多种,此处介绍远程桌面的本地资源共享方法. 1.运行mstsc,连接远程桌面的时候,点"选项>>" 2."本地资源"-->详细信息. 3."磁盘驱动器"前面打钩. 一.向Windows服务器上传下载文件方式 方法有很多种,此处介绍远程桌面的本地资源共享方法. 1.运行mstsc,连接远程桌