美文网首页iOS开发
AFN实现Get、Post、Upload、DownLoad

AFN实现Get、Post、Upload、DownLoad

作者: CoderZb | 来源:发表于2016-08-14 16:24 被阅读80次

    Get

    #import "ViewController.h"
    #import "AFNetworking.h"
    
    @interface ViewController ()
    
    @end
    
    @implementation ViewController
    
    -(void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event
    {
        [self get];
    }
    
    //发送get请求
    -(void)get
    {
        //1.创建会话管理者
        AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];
        //2.发送请求
        /*
         第一个参数:请求路径
         第二个参数:字典
         第三个参数:progress 进度
         第四个参数:success 成功回调
         task :请求任务 task.response
         responseObject:响应体信息(内部已经完成了序列化处理.JSON)
         第五个参数:failure 失败的回调
         error:错误信息
         */
        [manager GET:@"http://120.25.226.186:32812/video" parameters:nil progress:nil success:^(NSURLSessionDataTask * _Nonnull task, id  _Nullable responseObject) {
            
            //3.解析
            NSLog(@"%@--%@",[responseObject class],responseObject);
            
        } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
            
        }];
    }
    @end
    

    31-15.gif

    Post

    #import "ViewController.h"
    #import "AFNetworking.h"
    
    @interface ViewController ()
    
    @end
    
    @implementation ViewController
    
    -(void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event
    {
        [self post];
    }
    
    //发送post请求
    /*
     1)设置请求方法为POST
     2)把参数设置在请求体里面
     */
    -(void)post
    {
        //1.创建会话管理者
        AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];
        
        //创建字典,转载参数
        NSDictionary *dictM =@{
                               @"username":@"Zb",
                               @"pwd":@"CoderZb",
                               @"type":@"JSON"
                               };
        
           //2.发送请求
        /*
         第一个参数:请求路径
         第二个参数:字典
         第三个参数:progress 进度
         第四个参数:success 成功回调
         task :请求任务 task.response
         responseObject:响应体信息(内部已经完成了序列化处理.JSON)
         第五个参数:failure 失败的回调
         error:错误信息
         */
        [manager POST:@"http://120.25.226.186:32812/video" parameters:dictM progress:nil success:^(NSURLSessionDataTask * _Nonnull task, id  _Nullable responseObject) {
            
            //3.解析
            NSLog(@"%@--%@",[responseObject class],responseObject);
            
        } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
            
        }];
    }
    @end
    
    31-16.gif

    UpLoad

    
    #import "ViewController.h"
    #import "AFNetworking.h"
    
    @interface ViewController ()
    
    @end
    
    @implementation ViewController
    
    -(void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event
    {
        [self upload];
    }
    //文件上传
    -(void)upload
    {
        //1.创建会话管理者
        AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];
        
        //2.发送POST请求上传文件
        /*
         第一个参数:请求路径 NSString
         第二个参数:非文件参数
         第三个参数:constructingBodyWithBlock 用来拼接要上传的文件数据
         第四个参数:progress进度回调
         第五个参数:success 上传成功的回调
         第六个参数:failure 失败后的回调
         */
        [manager POST:@"http://120.25.226.186:32812/upload" parameters:nil constructingBodyWithBlock:^(id<AFMultipartFormData>  _Nonnull formData) {
            
            
            
            //方法1:
            //拼接要上传的文件数据
            /*
             第一个参数:要上传的文件的二进制数据
             第二个参数:参数名称 file
             第三个参数:该文件上传到服务器之后应该以什么名称来保存
             第四个参数:文件的MIMEType
             */
            /*
             UIImage *image= [UIImage imageNamed:@"100.7.png"];
             NSData *imageData = UIImagePNGRepresentation(image);
             [formData appendPartWithFileData:imageData name:@"file" fileName:@"haha.png" mimeType:@"image/png"];//加载本地的图片
             */
            
            
            //方法2:
            //FileURL:要上传的文件的URL路径
            
            /*
             NSURL *fileUrl = [NSURL fileURLWithPath:@"/Users/zhangbin/Desktop/100.7.png"];//加载指定路径上的图片
             [formData appendPartWithFileURL:fileUrl name:@"file" fileName:@"1233.png" mimeType:@"image/png" error:nil];
             */
            
            
            //方法3
            //该方法是简单版本,该方法内部会自动的得到文件的名称以及文件的类型
            NSURL *fileUrl = [NSURL fileURLWithPath:@"/Users/zhangbin/Desktop/100.7.png"];//加载指定路径上的图片
            [formData appendPartWithFileURL:fileUrl 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);
        }];
    }
    @end
    

    31-18.gif

    DownLoad

    #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];
        
        //2.创建请求对象
        NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString:@"http://120.25.226.186:32812/resources/images/minion_04.png"]];
        
        //3.创建下载任务
        /*
         第一个参数:请求对象
         第二个参数:进度回调 downloadProgress(获得进度信息)
         第三个参数:destination
         targetPath:文件的临时存储路径
         response:响应头信息
         返回值:NSURL(AFN内部已经实现了文件剪切的过程,但是需要我们告诉他应该把文件剪切到哪里)
         第四个参数:completionHandler 请求完成的时候调用
         response:响应头信息
         filePath==fullPath 文件的最终目录
         error:错误信息
         */
        NSURLSessionDownloadTask *downloadTask = [manager downloadTaskWithRequest:request progress:^(NSProgress * _Nonnull downloadProgress) {
            
            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(@"---%@---\n%@",targetPath,fullPath);
            return [NSURL fileURLWithPath:fullPath];
            
        } completionHandler:^(NSURLResponse * _Nonnull response, NSURL * _Nullable filePath, NSError * _Nullable error) {
            
            NSLog(@"下载完成");
        }];
        
        //4.执行方法
        [downloadTask resume];
    }
    @end
    

    31-17.gif

    相关文章

      网友评论

        本文标题:AFN实现Get、Post、Upload、DownLoad

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