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
当前类要实现如下代理即方法:

<UINavigationControllerDelegate, UIImagePickerControllerDelegate>
方法1:
- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary<NSString *,id> *)info
或方法2(已废弃):
- (void)imagePickerController:(UIImagePickerController *)picker didFinishPickingImage:(UIImage *)image editingInfo:(nullable NSDictionary<NSString *,id> *)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)

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 160,108评论 4 364
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,699评论 1 296
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 109,812评论 0 244
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 44,236评论 0 213
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,583评论 3 288
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,739评论 1 222
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,957评论 2 315
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,704评论 0 204
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,447评论 1 246
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,643评论 2 249
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,133评论 1 261
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,486评论 3 256
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,151评论 3 238
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,108评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,889评论 0 197
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,782评论 2 277
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,681评论 2 272

推荐阅读更多精彩内容

  • 在苹果彻底弃用NSURLConnection之后自己总结的一个网上的内容,加上自己写的小Demo,很多都是借鉴网络...
    付寒宇阅读 4,163评论 2 13
  • 发现 关注 消息 iOS 第三方库、插件、知名博客总结 作者大灰狼的小绵羊哥哥关注 2017.06.26 09:4...
    肇东周阅读 11,623评论 4 59
  • 1、登录(文本输入、按钮交互、基于网络的交互) 2、刷新界面:(表视图) 1>小部分应用程序数据来源于本地 2>更...
    炙冰阅读 696评论 0 1
  • 一. iOS中发送HTTP请求的方案 在iOS中,我们常用发送HTTP请求的方案有苹果原生(自带)NSURLCon...
    xx_cc阅读 10,838评论 26 150
  • 今天是2016年12月22日,再平常不过的一日。 昨日冬至,阴湿的空气把雾霾都赶得远远。城市里的路边有那么多烧纸钱...
    Fantasia阅读 166评论 0 1