zoukankan      html  css  js  c++  java
  • AFNetworking网络请求与图片上传工具(POST)

    AFNetworking网络请求与图片上传工具(POST)

    .h文件

    #import <Foundation/Foundation.h>
    
    /** 成功Block  */
    typedef void(^SuccessBlockType) (id responsData);
    /** 失败Block  */
    typedef void(^FaileBlockType) (NSError *error);
    
    @interface NetDataEngine : NSObject
    
    //网络请求
    + (void)postServerUrl:(NSString *)url parameters:(NSDictionary *)parameters success:(SuccessBlockType)success failure:(FaileBlockType)failure;
    
    //上传图片
    + (void)uploadWith:(UIImage *)upImg success:(SuccessBlockType)success failure:(FaileBlockType)failure;
    
    @end
    

    .m文件

    #import "NetDataEngine.h"
    #import "AFNetworking.h"
    
    @implementation NetDataEngine
    
    +(AFHTTPSessionManager *)manager
    {
        AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];
        
        // 声明上传的是json格式的参数,需要你和后台约定好,不然会出现后台无法获取到你上传的参数问题
        manager.requestSerializer = [AFHTTPRequestSerializer serializer]; // 上传普通格式
        //    manager.requestSerializer = [AFJSONRequestSerializer serializer]; // 上传JSON格式
        
        // 声明获取到的数据格式
        manager.responseSerializer = [AFHTTPResponseSerializer serializer]; // AFN不会解析,数据是data,需要自己解析
        //    manager.responseSerializer = [AFJSONResponseSerializer serializer]; // AFN会JSON解析返回的数据
        // 个人建议还是自己解析的比较好,有时接口返回的数据不合格会报3840错误,大致是AFN无法解析返回来的数据
        // 超时时间
        [manager.requestSerializer willChangeValueForKey:@"timeoutInterval"];
        
        manager.requestSerializer.timeoutInterval = 10.f;//设置请求超时时间
        
        [manager.requestSerializer didChangeValueForKey:@"timeoutInterval"];
        
        return manager;
    }
    
    + (void)postServerUrl:(NSString *)url parameters:(NSDictionary *)parameters success:(SuccessBlockType)success failure:(FaileBlockType)failure {
        
        AFHTTPSessionManager *manager = [self manager];
        
        [manager POST:url parameters:parameters progress:nil success:^(NSURLSessionDataTask * _Nonnull task, id  _Nullable responseObject) {
            
            NSDictionary *dict = [NSJSONSerialization JSONObjectWithData:responseObject options:NSJSONReadingMutableContainers error:nil];
            
    //        JGLog(@"%@",dict);
            success(dict);
            
        } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
    //        JGLog(@"error:  %@",error);
            failure(error);
        }];
    }
    
    + (void)uploadWith:(UIImage *)upImg success:(SuccessBlockType)success failure:(FaileBlockType)failure {
        
        // 创建管理者对象
        AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];
        [manager POST:UP_PIC parameters:nil constructingBodyWithBlock:^(id<AFMultipartFormData>  _Nonnull formData) {
            
            // 获取图片数据
            NSData *fileData = UIImagePNGRepresentation(upImg);
            
            // 设置上传图片的名字
            NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
            formatter.dateFormat = @"yyyyMMddHHmmss";
            NSString *str = [formatter stringFromDate:[NSDate date]];
            NSString *fileName = [NSString stringWithFormat:@"%@.png", str];
            
            [formData appendPartWithFileData:fileData name:@"image" fileName:fileName mimeType:@"image/png"];
            
        } progress:nil success:^(NSURLSessionDataTask * _Nonnull task, id  _Nullable responseObject) {
            
            //上传成功后回调
            success(responseObject);
        } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
    //失败回调
            failure(error);
        }];
    }
    
    @end
    

     如果网络请求超时,就在请求失败中执行超时操作,如:取消指示器,提示用户网络存在问题等。

     if (error.code == -1001) {

              [MBProgressHUD showError:@"网络超时,请检查网络"];

            }

      //隐藏指示器

           [SVProgressHUD dismiss];

  • 相关阅读:
    2018-6-2_《JS操作数组(纯洁方法)》
    Centos7 xfs分区格式化挂载
    centos 常用命令集锦
    docker1.12在cento7里的组建swarm (一)
    centos7线程、文件打开数等调优日志(非优化案例、仅仅是个个人记录、为把相关配置文件记录一下)
    Centos7.2 新镜像、系统到手 更新清理 并且安装docker1.2以后版本 目前内容适合docker 1.7.x ce(社区版)
    程序员新手 0年份等级 指导(一) 开发人员IT架构总览
    docker 土法制作zookeeper镜像 并且搭建集群 基于centos7.2
    centos 删除多余的内核启动项
    docker1.12在cento7里的组件swarm (二)
  • 原文地址:https://www.cnblogs.com/GJ-ios/p/5772925.html
Copyright © 2011-2022 走看看