AF3.1.0简单二次封装

#import <Foundation/Foundation.h>

@class AFNetworking;

@interface ZJLAFRequest : NSObject

+ (ZJLAFRequest *) sharedInstance;

/** get请求*/
- (void)GET:(NSString *)URLString dict:(id)dict progressFloat:(void (^)(float progressFloat))progressFloat succeed:(void (^) (id  responseObject))succeed failure:(void (^) (NSError *error))failure;

/** post请求*/
- (void)POST:(NSString *)URLString dict:(id)dict progressFloat:(void (^)(float progressFloat))progressFloat succeed:(void (^)(id responseObject))succeed failure:(void (^)(NSError *error))failure;

/** 下载文件*/
-(void)DOWNLOAD:(NSString *)URLString progressFloat:(void (^)(float progressFloat))progressFloat downLoadDic:(void (^)(id responseObject))downLoadDic;

/** 上传多张图片*/
-(void)UPLOAD:(NSString *)URLString dict:(id)dict imageArray:(id)imageArray progressFloat:(void (^)(float progressFloat))progressFloat succeed:(void (^) (id  responseObject))succeed failure:(void (^) (NSError *error))failure;

@end





#import "ZJLAFRequest.h"

@implementation ZJLAFRequest

/**
 *  创建网络请求类的单例
 */
static ZJLAFRequest *httpRequest = nil;
+ (ZJLAFRequest *)sharedInstance
{
    static dispatch_once_t onceToken;
    dispatch_once(&onceToken, ^{
        if (httpRequest == nil) {
            httpRequest = [[self alloc] init];
        }
    });
    return httpRequest;
}

+(instancetype)allocWithZone:(struct _NSZone *)zone
{
    static dispatch_once_t onceToken;
    dispatch_once(&onceToken, ^{
        if (httpRequest == nil) {
            httpRequest = [super allocWithZone:zone];
        }
    });
    return httpRequest;
}

- (instancetype)copyWithZone:(NSZone *)zone
{
    return httpRequest;
}

/**
 *  GET请求
 *
 *  @param URLString 网络请求地址
 *  @param dict      参数(可以是字典或者nil)
 *  @param succeed   成功后执行success block
 *  @param failure   失败后执行failure block
 */
- (void)GET:(NSString *)URLString dict:(id)dict progressFloat:(void (^)(float progressFloat))progressFloat succeed:(void (^)(id responseObject))succeed failure:(void (^)(NSError *error))failure
{
    //创建网络请求管理对象
    AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];
    //设置请求接口回来的时候支持什么类型的数据
    manager.responseSerializer.acceptableContentTypes = [NSSet setWithObjects:@"application/xml",@"text/xml",@"text/html",nil];
    //发送网络请求(请求方式为GET)
    [manager GET:URLString parameters:dict progress:^(NSProgress * _Nonnull downloadProgress) {
        
        //下载进度
        float downloadPro = 1.0 * downloadProgress.completedUnitCount / downloadProgress.totalUnitCount;
        progressFloat(downloadPro);
        
    } success:^(NSURLSessionDataTask * _Nonnull task, id  _Nullable responseObject) {
        
        succeed(responseObject);
        
    } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
        
        failure(error);
        
    }];
}

/**
 *  POST请求
 *
 *  @param URLString 网络请求地址
 *  @param dict      参数(可以是字典或者nil)
 *  @param succeed   成功后执行success block
 *  @param failure   失败后执行failure block
 */
- (void)POST:(NSString *)URLString dict:(id)dict progressFloat:(void (^)(float progressFloat))progressFloat succeed:(void (^)(id responseObject))succeed failure:(void (^)(NSError *error))failure
{
    //创建网络请求管理对象
    AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];
    //设置请求接口回来的时候支持什么类型的数据
    manager.responseSerializer.acceptableContentTypes = [NSSet setWithObjects:@"application/xml",@"text/xml",@"text/html",nil];
    //发送网络请求(请求方式为POST)
    [manager POST:URLString parameters:dict progress:^(NSProgress * _Nonnull uploadProgress) {
        
        //下载进度
        float downloadPro = 1.0 * uploadProgress.completedUnitCount / uploadProgress.totalUnitCount;
        progressFloat(downloadPro);
        
    } success:^(NSURLSessionDataTask * _Nonnull task, id  _Nullable responseObject) {
        
        succeed(responseObject);
        
    } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
        
        failure(error);
        
    }];
}

/**
 *  下载文件
 *
 *  @param URLString     网络请求地址
 *  @param progressFloat 当前的下载进度
 *  @param downLoadDic   保存下载完成的状态和路径
 */
-(void)DOWNLOAD:(NSString *)URLString progressFloat:(void (^)(float progressFloat))progressFloat downLoadDic:(void (^)(id responseObject))downLoadDic
{
    //创建管理者对象
    AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];
    //创建请求对象
    NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString:URLString]];
    //下载任务
    NSURLSessionDownloadTask *task = [manager downloadTaskWithRequest:request progress:^(NSProgress * _Nonnull downloadProgress) {
        
        //下载进度
        float downloadPro = 1.0 * downloadProgress.completedUnitCount / downloadProgress.totalUnitCount;
        progressFloat(downloadPro);
        
    } destination:^NSURL * _Nonnull(NSURL * _Nonnull targetPath, NSURLResponse * _Nonnull response) {
        
        //下载到哪个文件夹
        NSString *cachePath=NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES).lastObject;
        NSString *fileName=[cachePath stringByAppendingPathComponent:response.suggestedFilename];
        return [NSURL fileURLWithPath:fileName];
        
    } completionHandler:^(NSURLResponse * _Nonnull response, NSURL * _Nullable filePath, NSError * _Nullable error) {

        //保存数据到字典
        NSMutableDictionary *dictionary = [NSMutableDictionary dictionary];
        if (error)
            [dictionary setObject:error forKey:@"error"];
        //将url转成字符串去掉开头的file:再保存到字典
        if ([filePath absoluteString])
        {
            NSString *filePathStr = [filePath absoluteString];
            if ([filePathStr hasPrefix:@"file:"]) {
                 filePathStr = [[filePath absoluteString] substringFromIndex:5];
            }
            [dictionary setObject:filePathStr forKey:@"filePath"];
        }

        //下载完成调用的方法
        downLoadDic(dictionary);
        
    }];
    
    //开始启动任务
    [task resume];
}

/**
 *  上传图片
 *
 *  @param URLString     网络请求地址
 *  @param dict          参数(可以是字典或者nil)
 *  @param imageArray    保存图片的数组
 *  @param progressFloat 当前的上传进度
 *  @param succeed       上传成功
 *  @param failure       上传失败
 */
-(void)UPLOAD:(NSString *)URLString dict:(id)dict imageArray:(id)imageArray progressFloat:(void (^)(float progressFloat))progressFloat succeed:(void (^) (id  responseObject))succeed failure:(void (^) (NSError *error))failure
{
    //创建管理者对象
    AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];
    //设置请求接口回来的时候支持什么类型的数据
    manager.responseSerializer.acceptableContentTypes = [NSSet setWithObjects:@"application/xml",@"text/xml",@"text/html",nil];
    
    [manager POST:URLString parameters:dict constructingBodyWithBlock:^(id<AFMultipartFormData>  _Nonnull formData) {
        
        //保证当前上传图片名字的唯一性,获取当前时间戳
        NSDate *  senddate=[NSDate date];
        NSDateFormatter  *dateformatter=[[NSDateFormatter alloc] init];
        [dateformatter setDateFormat:@"YYMMddHHmmss"];
        NSString *  locationString=[dateformatter stringFromDate:senddate];

        for (int i = 0; i < [(NSMutableArray *)imageArray count]; i ++) {
            //获取每一张图片转成data
            UIImage *image = imageArray[i];
            NSData *data = UIImageJPEGRepresentation(image, 0.7);
            //时间戳拼接当前的i得到图片的名字
            NSString *name = [locationString stringByAppendingString:[NSString stringWithFormat:@"%d",i]];
            //这个就是上传的参数
            [formData appendPartWithFileData:data name:name fileName:[NSString stringWithFormat:@"%@.jpg",name] mimeType:@"image/jpeg"];
        }
        
    } progress:^(NSProgress * _Nonnull uploadProgress) {
        
        //打印下上传进度
        float downloadPro = 1.0 * uploadProgress.completedUnitCount / uploadProgress.totalUnitCount;
        progressFloat(downloadPro);
        
    } success:^(NSURLSessionDataTask * _Nonnull task, id  _Nullable responseObject) {
        
        succeed(responseObject);
        
    } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
        
        failure(error);
        
    }];
}

@end

使用方法:

先导入头文件 #import "ZJLAFRequest.h"
以post请求为例子:

 NSString *hostString = @"xxxxx";
    NSMutableDictionary *dic = [NSMutableDictionary dictionaryWithObjectsAndKeys:@"22",@"userid",nil];
    
    ZJLAFRequest *httpReauest = [ZJLAFRequest sharedInstance];
    [httpReauest POST:hostString dict:dic progressFloat:^(float progressFloat){
        
    }succeed:^(id responseObject) {
        
        //请求成功以后
        
    } failure:^(NSError *error) {
        
      //请求失败
        NSLog(@"%@", error);
        
    }];

 

转载于:https://my.oschina.net/linxiaoxi1993/blog/735928

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值