12NSBundle_上传图片_操作系统图库(UIImagePickerController)_ALAssetsLibrary_NSURLSession_断点下载_ALNetWorking

一、NSBundle

工程中所有的资源文件

编译文件

二、上传图片到服务器

项目:upload0509
1.客户端和服务端以二进制流的形式进行交互
2.上传图片,显然是用POST方式

NSURL *url = [NSURL URLWithString:@"http://192.168.6.227:8080/UploadFileServer/up"];
NSMutableURLRequest *mRequest = [NSMutableURLRequest requestWithURL:url];
//设置请求方法
[mRequest setHTTPMethod:@"POST"];
//设置请求体body
[mRequest setHTTPBody:imgData];
//发起请求
[NSURLConnection sendAsynchronousRequest:mRequest queue:[NSOperationQueue mainQueue] completionHandler:^(NSURLResponse * _Nullable response, NSData * _Nullable data, NSError * _Nullable connectionError) {
        if (connectionError == nil)
        {
            NSString *str = [[NSString alloc]initWithData:data encoding:NSUTF8StringEncoding];
            NSLog(@"ok:%@",str);
        }
        
    }];

三、从系统相册获取图片并上传至服务器

(一)从系统相册获取图片
项目:uploadFromPhotoAlbum0509
1.使用UIImagePickerController
当前类要实现如下代理即方法:


方法1:
- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info
或方法2(已废弃):
- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingImage:(UIImage *)image editingInfo:(nullable NSDictionary *)editingInfo

使用步骤:

 //1.创建
    UIImagePickerController *imgPickerCtr = [[UIImagePickerController alloc]init];
    //2.设置代理
    imgPickerCtr.delegate = self;
    //3.判断资源支持情况
    BOOL isAvailable = [UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypePhotoLibrary];
    if (isAvailable)
    {
        imgPickerCtr.sourceType = UIImagePickerControllerSourceTypePhotoLibrary;
    }

tips:
1.UIImagePickerController的资源类型
①图库:UIImagePickerControllerSourceTypePhotoLibrary,
②相机:UIImagePickerControllerSourceTypeCamera,
③相册:UIImagePickerControllerSourceTypeSavedPhotosAlbum

2.使用GCD
处理耗时任务(block就是任务)
防止处理大图片时,造成界面卡顿

dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
        //压缩比例
        NSData *imgData = UIImageJPEGRepresentation(img, 0.5);
        //上传
        dispatch_async(dispatch_get_main_queue(), ^{
            //抛回到主线程,刷新UI
        });
    });

(二)上传至服务器
项目:uploadFromAlbumToServer0509

四、对系统图库的操作

项目:ALAssetsLibraryDemo0509

 //ALAssetsLibrary 的结构
    //图库 ALAssetsLibrary
    //相册 ALAssetsGroup
    //照片 ALAssetRepresentation
    //1.创建图库对象
    ALAssetsLibrary *library = [[ALAssetsLibrary alloc]init];
    //遍历库中的相册
    [library enumerateGroupsWithTypes:ALAssetsGroupAll usingBlock:^(ALAssetsGroup *group, BOOL *stop) {
        //枚举器遍历到最后,group == nil
        if (group)
        {
            //过滤
            [group setAssetsFilter:[ALAssetsFilter allPhotos]];
            //判断照片的数量是否大于0(相册里可以有O张图片)
            if (group.numberOfAssets > 0)
            {
                //遍历相册中的照片
                [group enumerateAssetsUsingBlock:^(ALAsset *result, NSUInteger index, BOOL *stop) {
                    //ALAssetRepresentation:是系统对assets的封装,里面包含了图片的信息
                    ALAssetRepresentation *representation = result.defaultRepresentation;
                    //根据CGImage创建UIImage
                    UIImage *img = [UIImage imageWithCGImage:representation.fullScreenImage];
                    UIImageView *imgView = [[UIImageView alloc]init];
                    imgView.image = img;
                    imgView.frame = CGRectMake(0, i*width, width, width);
                    i++;
                    [self.view addSubview:imgView];
                }];
            }
        }
    } failureBlock:^(NSError *error) {
        NSLog(@"%@",error);
    }];

GitHub上的第三方库:
GMImagePicker

五、NSURLSession

项目:NSSession0509
2013年iOS7中,苹果提出了新的网络请求方案NSURLSession
日常的iOS开发中,AFNetWorking算是最常见的网络请求库:

  1. AF1.0 建立在 NSURLConnection的基础上
  2. AF2.0 同时使用NSURLConnection和NSURLSession
  3. AF3.0 全部使用NSURLSession(删除了所有基于NSURLConnection的代码)

NSURLSession有3种task(任务):
NSURLSessionDataTask:主要用于数据的请求json数据
NSURLSessionDownloadTask:主要用于下载文件
NSURLSessionUploadTask:主要用于上传文件

请求步骤:
1.url
2.request
3.获取NSURLSession(session)
4.使用session创建Task(DataTask/DownloadTask/UploadTask)
5.恢复Task(resume)

源码:

    //1.url
    NSURL *url = [NSURL URLWithString:@"http://www.baidu.com"];
    //2.request
    NSURLRequest *request = [NSURLRequest requestWithURL:url];
    //***************************重点***************************
    //3.使用URLSession替换URLConnection
    NSURLSession *session = [NSURLSession sharedSession];
    //4.使用task发起请求
    NSURLSessionDataTask *dataTask = [session dataTaskWithRequest:request completionHandler:^(NSData * _Nullable data, NSURLResponse * _Nullable response, NSError * _Nullable error) {
        if (error == nil)
        {
            NSString *strData = [[NSString alloc]initWithData:data encoding:NSUTF8StringEncoding];
            NSLog(@“成功。数据信息:%@“,strData);
        }
        else
        {
            NSLog(@"失败。错误信息:%@",error);
        }
        
    }];
    //5.恢复task,task才会执行
    [dataTask resume];

六、ALNetWorking

项目:AFNetWorking0509
1.网络的实时检测
步骤:
①获取网络检测管理器manager
②使用manager设置任务
③使用manager开始检测

2.使用 AFHTTPSessionManager 向服务器请求数据
步骤:
①获取session管理器manager
②使用manager获取数据

源码:

 //一、网络的实时检测
    //1.获取网络检测管理器
    AFNetworkReachabilityManager *netReachManager = [AFNetworkReachabilityManager sharedManager];
    //2.设置任务
    [netReachManager setReachabilityStatusChangeBlock:^(AFNetworkReachabilityStatus status) {
        switch (status) {
            case AFNetworkReachabilityStatusUnknown:
                NSLog(@"未知网络");
                break;
            case AFNetworkReachabilityStatusNotReachable:
                NSLog(@"断网");
                break;
            case AFNetworkReachabilityStatusReachableViaWWAN:
                NSLog(@"蜂窝数据");
                break;
            case AFNetworkReachabilityStatusReachableViaWiFi:
                NSLog(@"WiFi网络");
                break;
            default:
                break;
        }
    }];
    //3.开始检测
    [netReachManager startMonitoring];
    
    //二、使用 AFHTTPSessionManager 向服务器请求数据
    //1.获取session管理器
    AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];
    //2.使用管理器获取数据
    [manager GET:@"http://api.app.net/stream/0/posts/stream/global" parameters:nil success:^(NSURLSessionDataTask * _Nonnull task, id  _Nullable responseObject) {
        NSLog(@"%@",responseObject);
        
    } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
        NSLog(@"error:%@",error);
    }];

测试:使用ALNetWorking实现上传下载
上传:
1.AFHTTPSessionManager
2.post(url)

下载:
1.AFHTTPSessionManager
2.get(url)

你可能感兴趣的:(12NSBundle_上传图片_操作系统图库(UIImagePickerController)_ALAssetsLibrary_NSURLSession_断点下载_ALNetWorking)