405 afn ios - CSDN
  • ios AFN的二次封装

    2020-07-30 23:32:10
    ios 基于AFN的二次封装修正版。仅供参考。
  • //联系人:石虎  ...为了迎合iOS新版本的升级, AFNetworking在3.0版本中删除了基于 NSURLConnection API的所有支持。如果你的项目以前使用过这些API,建议您立即升级到基于 NSURLSession 的API的AFNetwo

    //联系人:石虎  QQ: 1224614774昵称:嗡嘛呢叭咪哄

    一.前言

    AFNetworking是一款在OS X和iOS下都令人喜爱的网络库。为了迎合iOS新版本的升级, AFNetworking在3.0版本中删除了基于 NSURLConnection API的所有支持。如果你的项目以前使用过这些API,建议您立即升级到基于 NSURLSession 的API的AFNetworking的版本。本指南将引导您完成这个过程。

    本指南是为了引导使用AFNetworking 2.x升级到最新的版本API,以达到过渡的目的,并且解释了新增和更改的设计结构。

    新设备要求: iOS 7, Mac OS X 10.9, watchOS 2, tvOS 9, & Xcode 7

    AFNetworking 3.0正式支持的iOS 7, Mac OS X的10.9, watchOS 2 , tvOS 9 和Xcode 7。如果你想使用AFNetworking在针对较旧版本的SDK项目,请检查README的兼容性信息。

    NSURLConnection的API已废弃

    AFNetworking 1.0建立在NSURLConnection的基础API之上 ,AFNetworking 2.0开始使用NSURLConnection的基础API ,以及较新基于NSURLSession的API的选项。 AFNetworking 3.0现已完全基于NSURLSession的API,这降低了维护的负担,同时支持苹果增强关于NSURLSession提供的任何额外功能。由于Xcode 7中,NSURLConnection的API已经正式被苹果弃用。虽然该API将继续运行,但将没有新功能将被添加,并且苹果已经通知所有基于网络的功能,以充分使NSURLSession向前发展。

    AFNetworking 2.X将继续获得关键的隐患和安全补丁,但没有新的功能将被添加。Alamofire(Swift下的网络请求)软件基金会建议,所有的项目迁移到基于NSURLSession的API。

    弃用的类

    下面的类已从AFNetworking 3.0中废弃:

    • AFURLConnectionOperation
    • AFHTTPRequestOperation
    • AFHTTPRequestOperationManager

    修改的类

    下面的类包含基于NSURLConnection的API的内部实现。他们已经被使用NSURLSession重构:

    • UIImageView+AFNetworking
    • UIWebView+AFNetworking
    • UIButton+AFNetworking

    迁移

    AFHTTPRequestOperationManager 核心代码

    如果你以前使用 AFHTTPRequestOperationManager , 你将需要迁移去使用 AFHTTPSessionManager。 以下的类在两者过渡间并没有变化:

    • securityPolicy
    • requestSerializer
    • responseSerializer

    接下来举一个关于AFHTTPSessionManager的简单例子。注意HTTP网络请求返回的不再是AFHTTPRequestOperation, 修改成为了NSURLSessionTask,并且成功和失败的Block块中的参数也变更为了NSURLSessionTask,而不再是AFHTTPRequestOperation。

    AFNetworking 2.x

    1

    2

    3

    4

    5

    6

    AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];

    [manager GET:@"请求的url" parameters:nil success:^(AFHTTPRequestOperation *operation, id responseObject) {

            NSLog(@"成功");

    } failure:^(AFHTTPRequestOperation *operation, NSError*error) {

            NSLog(@"失败");

    }];

    AFNetworking 3.0

    1

    2

    3

    4

    5

    6

    AFHTTPSessionManager *session = [AFHTTPSessionManager manager];

    [session GET:@"请求的url" parameters:nil success:^(NSURLSessionDataTask *task, id responseObject) {

            NSLog(@"成功");

    } failure:^(NSURLSessionDataTask *task, NSError *error) {

            NSLog(@"失败");        

    }];

    AFHTTPRequestOperation 核心代码

    与NSURLConnection对象不同,每个共享应用范围的设置如会话管理、缓存策略、Cookie存储以及URL协议等,这些NSURLSession对象都可以单独进行配置。使用特定的配置来初始化会话,它可以发送任务来获取数据,并上传或下载文件。

    在AFNetworking 2.0中,使用AFHTTPRequestOperation,有可能创建一个没有额外开销的独立的网络请求来获取数据。NSURLSession则需要更多的开销,为了获得所要请求的数据。

    接下来,将要通过AFHTTPSessionManager创建一个单例,并创建一个任务和启动它。

    AFNetworking 2.x

    1

    2

    3

    4

    5

    6

    7

    8

    9

    10

    NSURL *URL = [NSURL URLWithString:@""];

    NSURLRequest *request = [NSURLRequest requestWithURL:URL];

    AFHTTPRequestOperation *op = [[AFHTTPRequestOperation alloc] initWithRequest:request];

    op.responseSerializer = [AFJSONResponseSerializer serializer];

    [op setCompletionBlockWithSuccess:^(AFHTTPRequestOperation *operation, id responseObject) {

            NSLog(@"JSON: %@", responseObject);

    } failure:^(AFHTTPRequestOperation *operation, NSError *error) {

            NSLog(@"Error: %@", error);

    }];

    [[NSOperationQueue mainQueue] addOperation:op];

    AFNetworking 3.0

    1

    2

    3

    4

    5

    6

    7

    NSURL *URL = [NSURL URLWithString:@""];

    AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];

    [manager GET:URL.absoluteString parameters:nil success:^(NSURLSessionTask *task, id responseObject) {

            NSLog(@"JSON: %@", responseObject);

    } failure:^(NSURLSessionTask *operation, NSError *error) {

            NSLog(@"Error: %@", error);

    }];

    UIKit的迁移

    图片下载已经被重构,以遵循AlamofireImage架构与新的AFImageDownloader类。这个类的图片下载职责的代理人是UIButton与UIImageView的类目,并且提供了一些方法,在必要时可以自定义。类别中,下载远程图片的实际方法没有改变。

    UIWebView的类目被重构为使用AFHTTPSessionManager作为其网络请求。

    UIAlertView的类目被废弃

    从AFNetworking 3.0后UIAlertView的类目因过时而被废弃。并没有提供UIAlertController类目的计划,因为这是应用程序应处理的逻辑,而不是这个库。

    谢谢!!!
    展开全文
  • iOS AFN 封装数据

    2016-01-19 10:10:24
    // 封装要加载的AFN方法 + (void)setUpDataWithHuaKuaiUrl:(NSString *)url success:(void (^)(NSMutableArray *array))success;@end// 加载封装AFN方法 + (void)setUpDataWithHuaKuaiUrl:(NSStri
    @interface NewsCommon : NSObject
    // 封装要加载的AFN方法
    + (void)setUpDataWithHuaKuaiUrl:(NSString *)url success:(void (^)(NSMutableArray *array))success;@end
    // 加载封装AFN方法
    + (void)setUpDataWithHuaKuaiUrl:(NSString *)url success:(void (^)(NSMutableArray *array))success
    {
        AFHTTPSessionManager *manger = [AFHTTPSessionManager manager];
        [manger GET:url parameters:nil success:^(NSURLSessionDataTask * _Nonnull task, id  _Nonnull responseObject) {
            // 解析 responseObject
            NSDictionary *dictionary = responseObject[@"result"];
            NSMutableArray *dataArray = [NSMutableArray array];
            for (NSDictionary *dic in dictionary) {
                NewsModel *model = [[NewsModel alloc]init];
                [model setValuesForKeysWithDictionary:dic];
                [dataArray addObject:model];
            }
            // 调用下 block
            success(dataArray);
        } failure:^(NSURLSessionDataTask * _Nonnull task, NSError * _Nonnull error) {
            NSLog(@"%@", error.debugDescription);
        }];
    }
    
    // 在控制器里面    加载   封装的AFN方法
    // 加载数据(表头)
        NSString *url = @"http://api.m.jiemian.com/cate/all.json";
        [self requestDataForReloadWithUrl:url ];
    
    #pragma mark 数据解析(滑块数据)
    - (void)requestDataForReloadWithUrl:(NSString *)url{
    //    __weak NewsController *myself = self;
        [NewsCommon setUpDataWithHuaKuaiUrl:url success:^(NSMutableArray *array) {
            NSLog(@"%ld", array.count);
            self.dataArray = array;
            // 一定不要忘记了  刷新页面
            [self.tableviews reloadData];
        }];
    }
    
    展开全文
  • 一个优秀的网络封装框架,基于AFN封装,支持github,下载倒入项目即可使用
  • AFN 我们在日常开发中,经常使用到网络请求,之前已经简单的说过,网络的概念和请求数据和下载文件 但是在日常开发中,我们一般会使用到 AFNetworking这个框架,请求数据,上传数据,下载数据文件 简单的get...

    AFN

    • 我们在日常开发中,经常使用到网络请求,之前已经简单的说过,网络的概念和请求数据和下载文件
    • 但是在日常开发中,我们一般会使用到 AFNetworking这个框架,请求数据,上传数据,下载数据文件

    简单的get和post数据请求

    get
    
     AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];
        /*
         参数一:需要请求的 e网址字符串
         参数二:参数
         参数三: 请求头的设置
         参数四:下载进度
         
        
        */
        [manager GET:@"http://localhost/iOS/demo.json" parameters:nil headers:nil progress:nil success:^(NSURLSessionDataTask * _Nonnull task, id  _Nullable responseObject) {
            
            NSLog(@"%@",responseObject);
            
        } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
            NSLog(@"errir:----%@",error);
        }];
        
    
    
    

    在这里插入图片描述

    POST

     AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];
     [manager POST:@"网址" parameters:nil headers:nil progress:nil success:^(NSURLSessionDataTask * _Nonnull task, id  _Nullable responseObject) {
            
        } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
            
        }];
    

    文件下载

    参数一: 请求对象
    参数二: NSProgress下载进度 completedUnitCount下载的大小 totalUnitCount文件的总大小
    参数三: block回调,需要返回一个 存储下载文件的URL地址
    参数四: 下载完成时,返回下载文件的地址,就是 参数三 你传的地址

    
      AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];
     
        
        NSURLRequest *requset = [NSURLRequest requestWithURL:[NSURL URLWithString:@"http://localhost/video.mp4"]];
        
        //返回一个下载任务对象
        NSURLSessionDownloadTask *loadTask = [manager downloadTaskWithRequest:requset progress:^(NSProgress * _Nonnull downloadProgress) {
            // completedUnitCount 下载的大小
            // totalUnitCount文件的总大小
            NSLog(@"%lld----%lld",downloadProgress.completedUnitCount,downloadProgress.totalUnitCount);
            
        } destination:^NSURL * _Nonnull(NSURL * _Nonnull targetPath, NSURLResponse * _Nonnull response) {
            
            NSString *fullPath =[NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES).lastObject stringByAppendingString:response.suggestedFilename];
            NSLog(@"targetPath-:%@---fullPath:-%@",targetPath,fullPath);
            
            //这个block 需要返回一个目标 地址 存储下载的文件
            return  [NSURL fileURLWithPath:fullPath];
        } completionHandler:^(NSURLResponse * _Nonnull response, NSURL * _Nullable filePath, NSError * _Nullable error) {
            
            
            NSLog(@"下载完成地址:%@",filePath);
            
        }];
        
        //启动下载任务--开始下载
        [loadTask resume];
    

    文件上传

    方式一

     AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];
        
        NSURLRequest *requset = [NSURLRequest requestWithURL:[NSURL URLWithString:@"http://localhost"]];
        
        UIImage *image = [UIImage imageNamed:@"pic.jpg"];
        NSData *imageData = UIImageJPEGRepresentation(image, 0.8);
    
        NSURLSessionUploadTask *uploadTask = [manager uploadTaskWithRequest:requset fromData:imageData progress:^(NSProgress * _Nonnull uploadProgress) {
            
            NSLog(@"%lld",uploadProgress.completedUnitCount);
            
        } completionHandler:^(NSURLResponse * _Nonnull response, id  _Nullable responseObject, NSError * _Nullable error) {
            
            NSLog(@"error:%@",error.description);
            NSLog(@"%@",responseObject);
            
            
        }];
        
       
        
        [uploadTask resume];
    
    

    方式二

    • 这种方式比较简单,post请求

    在上传数据的时候 里面有多重方式

      AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];
        
        //上传数据
        [manager POST:@"http://localhost" parameters:nil headers:nil constructingBodyWithBlock:^(id<AFMultipartFormData>  _Nonnull formData) {
            //上传数据 方式1
            UIImage *image = [UIImage imageNamed:@"pic.jpg"];
            NSData *imageData = UIImageJPEGRepresentation(image, 0.7);
            //要上传的数据 和 上传数据服务器对应的名称
            [formData appendPartWithFormData:imageData name:@"file"];
            
            /*
             方式2
             FileData要上传的数据
             name 服务器规定
             fileName 上传文件的名称
             mimeType类型
             
             */
            [formData appendPartWithFileData:imageData name:@"file" fileName:@"100.jpg" mimeType:@"image/jpg"];
            
            //本地文件的路径 方式3
            NSURL *url = [NSURL fileURLWithPath:@"路径"];
            [formData appendPartWithFileURL:url name:@"file" error:nil];
            
        } progress:^(NSProgress * _Nonnull uploadProgress) {
            //上传进度
            
        } success:^(NSURLSessionDataTask * _Nonnull task, id  _Nullable responseObject) {
            //上传成功的回调
        } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
            //上传失败的回调
        }];
    
    

    AFN的一些序列化

    解析XML数据`
    • 接收到XML数据的时候,responseObject响应的数据类型是NSXMLParser可以参考XML数据解析
     //如果返回数据是XML的时候 记得序列化
        
        AFHTTPSessionManager *manager =  [AFHTTPSessionManager manager];
        
        //设置响应的方式是XML
        manager.responseSerializer = [AFXMLParserResponseSerializer serializer];
        
        [manager GET:@"loacst" parameters:nil headers:nil progress:nil success:^(NSURLSessionDataTask * _Nonnull task, id  _Nullable responseObject) {
            //如果是XML数据 responseObject对应的是NSXMLParser
            NSXMLParser *parser = (NSXMLParser *)responseObject;
            //进行解析
            parser.delegate = self;
            //解析数据
            [parser parse];
            
        } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
            
        }];
    
    

    数据既不是XML也不是JSON

    • 修改响应的方式为原生的
    
        
        AFHTTPSessionManager *manager =  [AFHTTPSessionManager manager];
        
        //设置响应的方式  
        manager.responseSerializer =[AFHTTPResponseSerializer serializer];
        
    
    • 在请求不是AFN规定机械方式的时候 还是错出现一些问题的 比如:text/html的格式
    • 报错码是 Code=-1016, content-type:text/html
    • 默认的解析方式如下
      在这里插入图片描述
      //如果返回数据是XML的时候 记得序列化
        
        AFHTTPSessionManager *manager =  [AFHTTPSessionManager manager];
        
        //修改响应解析 的类型
        manager.responseSerializer.acceptableContentTypes = [NSSet setWithObjects:@"text/html",@"text/json" nil];
    

    网络状态的检测AFNetworkReachabilityManager

    //创建管理对象
        AFNetworkReachabilityManager *manager = [AFNetworkReachabilityManager sharedManager];
        
        [manager setReachabilityStatusChangeBlock:^(AFNetworkReachabilityStatus status) {
            //网络的状态
            /*
             //未知状态
             AFNetworkReachabilityStatusUnknown          = -1,
             //没有网络
             AFNetworkReachabilityStatusNotReachable     = 0,
             //蜂窝
             AFNetworkReachabilityStatusReachableViaWWAN = 1,
             //wifi
             AFNetworkReachabilityStatusReachableViaWiFi = 2,
             
             */
            
            NSLog(@"------%zd",status);
            
            
        }];
        
        //开始监听
        [manager startMonitoring];
    
    
    
    展开全文
  • 一.AFN的基本使用// // ViewController.m // 01-掌握-AFN基本使用 // // Created by xiaomage on 16/2/27. // Copyright © 2016年 小码哥. All rights reserved. // #import "ViewController.h" #import...

    一.AFN的基本使用

    //
    //  ViewController.m
    //  01-掌握-AFN基本使用
    //
    //  Created by xiaomage on 16/2/27.
    //  Copyright © 2016年 小码哥. All rights reserved.
    //
    
    #import "ViewController.h"
    #import "AFNetworking.h"
    
    @interface ViewController ()
    
    @end
    
    @implementation ViewController
    
    -(void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event
    {
        [self post];
    }
    
    -(void)get
    {
        //1.创建会话管理者
        AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];
        
        //http://120.25.226.186:32812/login?username=123&pwd=122&type=JSON
        //
        
        NSDictionary *paramDict = @{
                                    @"username":@"520it",
                                    @"pwd":@"520it",
                                    @"type":@"JSON"
                                    };
        //2.发送GET请求
        /*
         第一个参数:请求路径(不包含参数).NSString
         第二个参数:字典(发送给服务器的数据~参数)
         第三个参数:progress 进度回调
         第四个参数:success 成功回调
                    task:请求任务
                    responseObject:响应体信息(JSON--->OC对象)
         第五个参数:failure 失败回调
                    error:错误信息
         响应头:task.response
         */
        [manager GET:@"http://120.25.226.186:32812/login" parameters:paramDict progress:nil success:^(NSURLSessionDataTask * _Nonnull task, id  _Nullable responseObject) {
            
            NSLog(@"%@---%@",[responseObject class],responseObject);
            
        } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
            NSLog(@"请求失败--%@",error);
        }];
    }
    -(void)post
    {
        //1.创建会话管理者
        AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];
        
        NSDictionary *paramDict = @{
                                    @"username":@"520it",
                                    @"pwd":@"520",
                                    @"type":@"JSON"
                                    };
        //2.发送GET请求
        /*
         第一个参数:请求路径(不包含参数).NSString
         第二个参数:字典(发送给服务器的数据~参数)
         第三个参数:progress 进度回调
         第四个参数:success 成功回调
            task:请求任务
            responseObject:响应体信息(JSON--->OC对象)
         第五个参数:failure 失败回调
            error:错误信息
         响应头:task.response
         */
        [manager POST:@"http://120.25.226.186:32812/login" parameters:paramDict progress:nil success:^(NSURLSessionDataTask * _Nonnull task, id  _Nullable responseObject) {
            
            NSLog(@"%@---%@",[responseObject class],responseObject);
            
        } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
            NSLog(@"请求失败--%@",error);
        }];
    }
    @end
    

    二.AFN大文件下载

    //
    //  ViewController.m
    //  02-掌握-AFN实现文件下载
    //
    //  Created by xiaomage on 16/2/27.
    //  Copyright © 2016年 小码哥. All rights reserved.
    //
    
    #import "ViewController.h"
    #import "AFNetworking.h"
    
    @interface ViewController ()
    
    @end
    
    @implementation ViewController
    
    -(void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event
    {
        [self download];
    }
    
    -(void)download
    {
        //1.创建会话管理者
        AFHTTPSessionManager *manager =[AFHTTPSessionManager manager];
        
        NSURL *url = [NSURL URLWithString:@"http://120.25.226.186:32812/resources/videos/minion_01.mp4"];
        
        NSURLRequest *request = [NSURLRequest requestWithURL:url];
        
        //2.下载文件
        /*
         第一个参数:请求对象
         第二个参数:progress 进度回调 downloadProgress
         第三个参数:destination 回调(目标位置)
                    有返回值
                    targetPath:临时文件路径
                    response:响应头信息
         第四个参数:completionHandler 下载完成之后的回调
                    filePath:最终的文件路径
         */
        NSURLSessionDownloadTask *download = [manager downloadTaskWithRequest:request progress:^(NSProgress * _Nonnull downloadProgress) {
            
            //监听下载进度
            //completedUnitCount 已经下载的数据大小
            //totalUnitCount     文件数据的中大小
            NSLog(@"%f",1.0 *downloadProgress.completedUnitCount / downloadProgress.totalUnitCount);
            
        } destination:^NSURL * _Nonnull(NSURL * _Nonnull targetPath, NSURLResponse * _Nonnull response) {
            
            NSString *fullPath = [[NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES) lastObject] stringByAppendingPathComponent:response.suggestedFilename];
            
            NSLog(@"targetPath:%@",targetPath);
            NSLog(@"fullPath:%@",fullPath);
            
            return [NSURL fileURLWithPath:fullPath];
        } completionHandler:^(NSURLResponse * _Nonnull response, NSURL * _Nullable filePath, NSError * _Nullable error) {
            
            NSLog(@"%@",filePath);
        }];
        
        //3.执行Task
        [download resume];
    }
    
    
    @end
    

    三.AFN文件上传

    //
    //  ViewController.m
    //  03-掌握-AFN实现文件上传
    //
    //  Created by xiaomage on 16/2/27.
    //  Copyright © 2016年 小码哥. All rights reserved.
    //
    
    #import "ViewController.h"
    #import "AFNetworking.h"
    
    
    #define Kboundary @"----WebKitFormBoundaryjv0UfA04ED44AhWx"
    
    #define KNewLine [@"\r\n" dataUsingEncoding:NSUTF8StringEncoding]
    
    @interface ViewController ()
    
    @end
    
    @implementation ViewController
    
    -(void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event
    {
        [self upload2];
    }
    
    //不推荐
    -(void)upload
    {
        //1.创建会话管理者
        AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];
        
        //2.1url
        NSURL *url = [NSURL URLWithString:@"http://120.25.226.186:32812/upload"];
        
        //2.2创建请求对象
        NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
        
        //2.3 设置请求方法
        request.HTTPMethod = @"POST";
        
        //2.4 设请求头信息
        [request setValue:[NSString stringWithFormat:@"multipart/form-data; boundary=%@",Kboundary] forHTTPHeaderField:@"Content-Type"];
        
        //3.发送请求上传文件
        NSURLSessionUploadTask *uploadTask = [manager uploadTaskWithRequest:request fromData:[self getBodyData] progress:^(NSProgress * _Nonnull uploadProgress) {
            NSLog(@"%f",1.0 * uploadProgress.completedUnitCount/ uploadProgress.totalUnitCount);
            
        } completionHandler:^(NSURLResponse * _Nonnull response, id  _Nullable responseObject, NSError * _Nullable error) {
           
            NSLog(@"%@",responseObject);
        }];
        
        //4.执行task
        [uploadTask resume];
    }
    
    -(void)upload2
    {
        //1.创建会话管理者
        AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];
        
    //    NSDictionary *dictM = @{}
        //2.发送post请求上传文件
        /*
         第一个参数:请求路径
         第二个参数:字典(非文件参数)
         第三个参数:constructingBodyWithBlock 处理要上传的文件数据
         第四个参数:进度回调
         第五个参数:成功回调 responseObject:响应体信息
         第六个参数:失败回调
         */
        [manager POST:@"http://120.25.226.186:32812/upload" parameters:nil constructingBodyWithBlock:^(id<AFMultipartFormData>  _Nonnull formData) {
            
            UIImage *image = [UIImage imageNamed:@"Snip20160227_128"];
            NSData *imageData = UIImagePNGRepresentation(image);
            
            //使用formData来拼接数据
            /*
             第一个参数:二进制数据 要上传的文件参数
             第二个参数:服务器规定的
             第三个参数:该文件上传到服务器以什么名称保存
             */
            //[formData appendPartWithFileData:imageData name:@"file" fileName:@"xxxx.png" mimeType:@"image/png"];
            
            //[formData appendPartWithFileURL:[NSURL fileURLWithPath:@"/Users/xiaomage/Desktop/Snip20160227_128.png"] name:@"file" fileName:@"123.png" mimeType:@"image/png" error:nil];
            
            [formData appendPartWithFileURL:[NSURL fileURLWithPath:@"/Users/xiaomage/Desktop/Snip20160227_128.png"] name:@"file" error:nil];
            
        } progress:^(NSProgress * _Nonnull uploadProgress) {
            
            NSLog(@"%f",1.0 * uploadProgress.completedUnitCount/uploadProgress.totalUnitCount);
            
        } success:^(NSURLSessionDataTask * _Nonnull task, id  _Nullable responseObject) {
            NSLog(@"上传成功---%@",responseObject);
            
        } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
            NSLog(@"上传失败---%@",error);
        }];
        
    }
    -(NSData *)getBodyData
    {
        NSMutableData *fileData = [NSMutableData data];
        //5.1 文件参数
        /*
         --分隔符
         Content-Disposition: form-data; name="file"; filename="Snip20160225_341.png"
         Content-Type: image/png(MIMEType:大类型/小类型)
         空行
         文件参数
         */
        [fileData appendData:[[NSString stringWithFormat:@"--%@",Kboundary] dataUsingEncoding:NSUTF8StringEncoding]];
        [fileData appendData:KNewLine];
        
        //name:file 服务器规定的参数
        //filename:Snip20160225_341.png 文件保存到服务器上面的名称
        //Content-Type:文件的类型
        [fileData appendData:[@"Content-Disposition: form-data; name=\"file\"; filename=\"Sss.png\"" dataUsingEncoding:NSUTF8StringEncoding]];
        [fileData appendData:KNewLine];
        [fileData appendData:[@"Content-Type: image/png" dataUsingEncoding:NSUTF8StringEncoding]];
        [fileData appendData:KNewLine];
        [fileData appendData:KNewLine];
        
        UIImage *image = [UIImage imageNamed:@"Snip20160227_128"];
        //UIImage --->NSData
        NSData *imageData = UIImagePNGRepresentation(image);
        [fileData appendData:imageData];
        [fileData appendData:KNewLine];
        
        //5.2 非文件参数
        /*
         --分隔符
         Content-Disposition: form-data; name="username"
         空行
         123456
         */
        [fileData appendData:[[NSString stringWithFormat:@"--%@",Kboundary] dataUsingEncoding:NSUTF8StringEncoding]];
        [fileData appendData:KNewLine];
        [fileData appendData:[@"Content-Disposition: form-data; name=\"username\"" dataUsingEncoding:NSUTF8StringEncoding]];
        [fileData appendData:KNewLine];
        [fileData appendData:KNewLine];
        [fileData appendData:[@"123456" dataUsingEncoding:NSUTF8StringEncoding]];
        [fileData appendData:KNewLine];
        
        //5.3 结尾标识
        /*
         --分隔符--
         */
        [fileData appendData:[[NSString stringWithFormat:@"--%@--",Kboundary] dataUsingEncoding:NSUTF8StringEncoding]];
        return fileData;
    }
    
    @end


    展开全文
  • AFNetworkingAFNetworking这牛逼的框架相信...AFNetworking的简单介绍以及版本历史AFN的链接:GitHubAFN是iOS开发中一个非常牛逼的网络请求框架,根据它GitHbub上的介绍,AFN支持iOS,MAC OS ,watchOS以及tvOS 等等,
  • 一、AFN发送网络请求 知识点: 1. 使用AFN来发送网络请求: 需要创建会话管理者: AFHTTPSessionManager 对象 [AFHTTPSessionManager manager] 这个方法不是一个单例. 2. 请求路径中不能包含参数. GET请求的参数...
  • AFN的简单封装

    2018-04-05 15:05:31
    前记 最近在隔壁的小组有一个项目,由于好久没有学习iOS,所有想乘机温习下功课,然后就主动请缨,帮助他们...这个封装是基于AFNiOS网络请求最好的框架)用的AFN3.0。其实就是感觉就是将复杂重复的代码提取到了...
  • 文章目录前言code = "xxxx"code = "-999"解释:解决方法:code = "3840"解释:解决方法:code = "-1011"解释:解决方法:code = "-1202"解释:解决方法:code = "-...去年课设的时候才刚刚接触iOS开发,还写不了i...
  • iOS AFN网络请求封装(单例模式)可根据http://blog.csdn.net/error/404.html?from=http%3a%2f%2fblog.csdn.net%2faiyang10%2farticle%2fdetails%2f49470403博客内容理解使用
  • 欢迎使用Markdown编辑器写博客本Markdown编辑器使用StackEdit修改而来,用它写博客,将会带来全新的体验哦: Markdown和扩展Markdown简洁的语法 代码块高亮 图片链接和图片上传 LaTex数学公式 UML序列图和流程图 ...
  • ios使用AFN发送POST请求

    2018-06-07 18:08:17
    AFN下载地址:https://github.com/AFNetworking/AFNetworking使用前请先导入AFN框架文件,并导入头文件 #import "AFNetworking.h"1.创建会话管理者对象AFHTTPSessionManager *manager = ...
  • iOS--AFN文件上传

    2016-08-12 11:49:03
    1. AFN上传文件的方法主要为:  A.[formData appendPartWithFileURL:[NSURL fileURLWithPath:@""] name:@"file" error:nil]; B.[formData appendPartWithFileURL:[NSURL fileURLWithPath:@""] name:@"file" ...
  • IOS AFN 通过body传递参数给服务器 2017-07-10 20:19行走在砂砾中 此段代码适用于请求接口时传参为json格式,而非常见的dictionary。同时设置请求头的Content-Type: application/json;charset=UTF-8 先将AFN文件...
  • ASI和AFN有什么区别 1.性能(重点) * ASI基于底层的CFNetwork框架 * AFN基于NSURLConnection * 运行性能: ASI > ASN   2.处理服务器数据 1> AFN : 根据服务器返回数据的数据, 进行自动解析 * 服务器返回的是JSON数据...
  • iOS安全之二次封装AFN并设置请求头/执行HTTPS加强安全
  • iOS AFN设置超时

    2019-06-13 05:19:55
    为什么80%的码农都做不了架构师?>>> ...
  • 1. 利用第三方框架获取服务器数据(AFNetworking框架); * 2.使用POST/GET方式进行提交* 3.头部文件导入AFNetworking.h 一:首先看代码POST请求 ... NSDictionary *parameters = @{@"... ...
  • AFN设置请求超时时间 第一种: //设置超时 [manager.requestSerializer willChangeValueForKey:@"timeoutInterval"]; manager.requestSerializer.timeoutInterval = 30.f; [manager.requestSerializer ...
1 2 3 4 5 ... 20
收藏数 4,281
精华内容 1,712
热门标签
关键字:

405 afn ios