美文网首页
1.3 NSURLSession 数据请求,下载,上传

1.3 NSURLSession 数据请求,下载,上传

作者: 草根小强 | 来源:发表于2019-04-17 17:05 被阅读0次

NSURLSession 数据请求,下载,上传

#import "ViewController.h"
#define BASE_URL @"http://iappfree.candou.com:8080/free/applications/limited"
#define IMG_URL @"http://a.hiphotos.baidu.com/image/pic/item/55e736d12f2eb938d3de795ad0628535e4dd6fe2.jpg"

@interface ViewController () <NSURLSessionDownloadDelegate>

@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    // Do any additional setup after loading the view, typically from a nib.
    
   //NSURLConnection 在iOS 8之后已经不推荐使用了,
   //苹果建议,用NSURLSession 来做数据请求
    
    //session有三种任务模式
    //1、dataTask 数据请求任务(默认)
    
        [self session];
    
    //2、downloadTask 下载任务
    //3、uploadTask 上传任务

}

- (void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {
//  [self downloadTak];
    [self downloadTak2];
}

#pragma mark ------------下载任务-------------
- (void)downloadTak {
    
    //1、获取session 单例
    NSURLSession *session = [NSURLSession sharedSession];
    
    //2、下载任务
   NSURLSessionDownloadTask *task = [session downloadTaskWithURL:[NSURL URLWithString:IMG_URL] completionHandler:^(NSURL *location, NSURLResponse *response, NSError *error) {
        
        //这里是下载的回调
        //location:表示文件下载的位置
        NSLog(@"%@",location.absoluteString);
       //沙盒
       //因为下载的路径,默认是tmp文件夹下面的,所以我们需要在下载完成之后,把内容拷贝到新的位置 Document下面
//       NSFileManager *manager = [NSFileManager defaultManager];
//       manager copyItemAtPath:<#(NSString *)#> toPath:<#(NSString *)#> error:<#(NSError *__autoreleasing *)#>
    }];
    
    //3、开始任务
    [task resume];
}

//有进度的下载
- (void)downloadTak2 {
    //1、实例化一个session,并且设置代理
    //session 还有三种会话模式
    //
    NSURLSession *session = [NSURLSession sessionWithConfiguration:[NSURLSessionConfiguration defaultSessionConfiguration] delegate:self delegateQueue:nil];
    
    //2、开启一个下载任务
    NSURLSessionDownloadTask *task = [session downloadTaskWithURL:[NSURL URLWithString:IMG_URL]];
    
    //3、开始下载
    [task resume];
}

#pragma mark --------有进度的下载的协议方法-------------
//下载完成之后的回调
- (void)URLSession:(NSURLSession *)session downloadTask:(NSURLSessionDownloadTask *)downloadTask didFinishDownloadingToURL:(NSURL *)location {
    NSLog(@"%@",location);
}

//有关进度
- (void)URLSession:(NSURLSession *)session downloadTask:(NSURLSessionDownloadTask *)downloadTask
      didWriteData:(int64_t)bytesWritten
 totalBytesWritten:(int64_t)totalBytesWritten
totalBytesExpectedToWrite:(int64_t)totalBytesExpectedToWrite{
    
    //后两个参数
    //totalBytesWritten 表示已经下载的大小
    //totalBytesExpectedToWrite  表示总大小
    float progress = totalBytesWritten / (float)totalBytesExpectedToWrite;
    NSLog(@"%f",progress);
    
}

#pragma mark ---------数据请求任务----------
- (void)session {
    //1、实例化一个session
    NSURLSession *session = [NSURLSession sharedSession];
    
    //2、数据请求任务
     NSURLSessionDataTask *task = [session dataTaskWithURL:[NSURL URLWithString:IMG_URL] completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
        
        //这里是数据请求后,服务器的响应
        //data:请求到的数据
        //response:响应头
        //error:错误日志
        
        if (error) {
            //请求失败
            NSLog(@"%@",error);
        }else {
//            //请求成功
//            NSDictionary *dict = [NSJSONSerialization JSONObjectWithData:data options:0 error:nil];
//            NSLog(@"%@",dict);
            
            
            //1、实例化一个imageView 并展示图片
#warning 所谓异步请求,其实就是开辟了一个新的线程(子线程),在子线程中进行同步的请求,线程我们可以理解为一个通道,NSURLSession数据请求成功后,依然在子线程里面做的回调,然而子线程里面是不能够进行UI操作的
            dispatch_async(dispatch_get_main_queue(), ^{
                UIImageView *imageView = [[UIImageView alloc]initWithFrame:self.view.bounds];
                imageView.image = [UIImage imageWithData:data];
                [self.view addSubview:imageView];
                NSLog(@"加载完成");
            });
            
        }
    }];
    
    //3、开始任务
    [task resume];
}
@end

NSURLSession 数据请求.png

相关文章

网友评论

      本文标题:1.3 NSURLSession 数据请求,下载,上传

      本文链接:https://www.haomeiwen.com/subject/hhunwqtx.html