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)

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容

  • 在蘋果徹底棄用NSURLConnection之后自己總結的一個網上的內容,加上自己寫的小Demo,很多都是借鑒網絡...
    付寒宇閱讀 4,311評論 2 13
  • 發現 關注 消息 iOS 第三方庫、插件、知名博客總結 作者大灰狼的小綿羊哥哥關注 2017.06.26 09:4...
    肇東周閱讀 12,229評論 4 61
  • 1、登錄(文本輸入、按鈕交互、基于網絡的交互) 2、刷新界面:(表視圖) 1>小部分應用程序數據來源于本地 2>更...
    炙冰閱讀 804評論 0 1
  • 一. iOS中發送HTTP請求的方案 在iOS中,我們常用發送HTTP請求的方案有蘋果原生(自帶)NSURLCon...
    xx_cc閱讀 10,905評論 26 150
  • 今天是2016年12月22日,再平常不過的一日。 昨日冬至,陰濕的空氣把霧霾都趕得遠遠。城市里的路邊有那么多燒紙錢...
    Fantasia閱讀 196評論 0 1