iOS 对于AFNetworking3.x版本的二次封装包含(GET、POST、上传、下载)

对于AFNetworking的封装之前已经进行了封装了一次,可是AFN的持续更新,所以以后也得持久更新才行,后期我会使用cocopods或者carthage来管理,这样的话也方便。

话不多说转回主题,本次我进行二次封装的是3.x的,里边还是有些方法与之前的不一样的,这个版本主要是简单的一些数据请求,例如上传图片/音频,下载文件等,对于一些用户使用的AFN的版本不同,那么GET或者POST所调起的方法也不一样。例如请求过程中用到的progress。

对于返回的数据,我利用枚举的方式,将可能出现问题的问题给返回,这样就不需要每次都在这进行修改或者调试,当然,http响应码网上已经有很全了

/**
 GET请求接口

 @param url 请求接口
 @param parameters 接口传入参数内容
 @param successful 成功Block返回
 @param failure 失败Block返回
 */

- (void)GETUrl:(NSString *)url
        parameters:(NSDictionary *)parameters
        success:(void (^)(id responseObject))successful
        failure:(void (^) (NSError *error, ParamtersJudgeCode  judgeCode))failure;

/**
 GET请求接口
 
 @param url 请求接口
 @param parameters 接口传入参数内容
 @param successful 成功Block返回
 @param failure 失败Block返回
 */

- (void)GETUrl:(NSString *)url
    parameters:(NSDictionary *)parameters
       success:(void (^)(id responseObject))successful
       failure:(void (^) (NSError *error, ParamtersJudgeCode  judgeCode))failure
{
    NSError *error = nil;
    //判断接口是否是空值
    if (url.length == 0 || [url isEqualToString:@""]) {
        failure(error, RequestUrlNil);
    }
    //开始请求内容
    [_sessionManager GET:url parameters:parameters progress:^(NSProgress * _Nonnull downloadProgress) {
        //如果需要填充进度内容,可以直接进行内容添加
    } success:^(NSURLSessionDataTask * _Nonnull task, id  _Nullable responseObject) {
        successful(responseObject);
    } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
        failure(error,RequestFailed);
    }];

}

/**
 POST请求接口

 @param url 请求接口
 @param parameters 接口传入参数
 @param successful 成功Block返回
 @param failure 失败Block返回
 */
- (void)POSTUrl:(NSString *)url
        parameters:(NSDictionary *)parameters
        success:(void (^)(id responseObject))successful
        failure:(void (^) (NSError *error, ParamtersJudgeCode  judgeCode))failure;

/**
 POST请求接口
 
 @param url 请求接口
 @param parameters 接口传入参数
 @param successful 成功Block返回
 @param failure 失败Block返回  ParamtersJudgeCode 判断参数
 */
- (void)POSTUrl:(NSString *)url
        parameters:(NSDictionary *)parameters
        success:(void (^)(id responseObject))successful
        failure:(void (^) (NSError *error, ParamtersJudgeCode  judgeCode))failure
{
    NSError *error = nil;
    //判断接口是否是空值
    if (url.length == 0 || [url isEqualToString:@""]) {
        failure(error, RequestUrlNil);
    }
    //开始请求内容
    [_sessionManager POST:url parameters:parameters progress:^(NSProgress * _Nonnull downloadProgress) {
        //如果需要填充进度内容,可以直接进行内容添加
    } success:^(NSURLSessionDataTask * _Nonnull task, id  _Nullable responseObject) {
        successful(responseObject);
    } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
        failure(error,RequestFailed);
    }];
}


/**
 图片上传接口(上传音频与图片是一致的,需要更改的只是 mimeType类型,根据要求设置对应的格式即可)
 
 @param url 请求接口
 @param paramters 请求参数
 @param pictureData 图片数据
 @param pictureKey 与后台约定的 文件key
 @param progress 上传进度
 @param successful 成功返回
 @param failure 失败返回
 */
- (void)HeaderUploadUrl:(NSString *)url parameters:(NSDictionary *)paramters
            pictureData:(NSData *)pictureData
             pictureKey:(NSString *)pictureKey
               progress:(HttpProgress)progress
                success:(void (^) (id responseObject))successful
                failure:(void (^) (NSError *error, ParamtersJudgeCode  judgeCode))failure;



/**
 图片上传接口(上传音频与图片是一致的,需要更改的只是 mimeType类型,根据要求设置对应的格式即可)
 
 @param url 请求接口
 @param paramters 请求参数
 @param pictureData 图片数据
 @param pictureKey 与后台约定的 文件key
 @param progress 上传进度
 @param successful 成功返回
 @param failure 失败返回
 */
- (void)HeaderUploadUrl:(NSString *)url parameters:(NSDictionary *)paramters
            pictureData:(NSData *)pictureData
             pictureKey:(NSString *)pictureKey
               progress:(HttpProgress)progress
                success:(void (^) (id responseObject))successful
                failure:(void (^) (NSError *error, ParamtersJudgeCode  judgeCode))failure
{
    NSError *error = nil;
    //接口URL为空
    if (url.length == 0 || [url isEqualToString:@""] ) {
        failure(error, RequestUrlNil);
    }
    //传入参数为空
    if ([self isNullToDictionary:paramters]) {
        failure(error, ParamtersObjectNil);
    }
    //传入上传图片数据为空(NSData)
    if (pictureData.length == 0) {
        failure(error, UploadPictureDataNil);
    }
    //上传图片,服务器端文件名
    if (pictureKey.length == 0 || [pictureKey isEqualToString:@""]) {
        failure(error, UploadPictureKeyNil);
    }
    
    
    [_sessionManager POST:url parameters:paramters constructingBodyWithBlock:^(id<AFMultipartFormData>  _Nonnull formData) {
        //对上传完文件的配置
        //获取当前时间(int 时间戳转换)
        int nowDate = [[NSString stringWithFormat:@"%ld",(long)[[NSDate date] timeIntervalSince1970]]intValue];
        NSString *fileName = [NSString stringWithFormat:@"%d.jpg",nowDate];
        //参数介绍
        //fileData : 图片资源  name : 预定key   fileName  : 文件名  mimeType    : 资源类型(根据后台进行对应配置)
       [formData appendPartWithFileData:pictureData name:pictureKey fileName:fileName mimeType:@"image/jpeg"];

    } progress:^(NSProgress * _Nonnull uploadProgress) {
        //上传进度
        dispatch_sync(dispatch_get_main_queue(), ^{
            progress ? progress(uploadProgress) : nil;
        });
        
    } success:^(NSURLSessionDataTask * _Nonnull task, id  _Nullable responseObject) {
        successful(responseObject);
    } failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
        //可以将http响应码返回,以便于判断错误
        failure(error,[self showResponseCode:task.response]);
    }];

}


/**
 下载文件接口
 
 @param url 请求接口
 @param progress 下载进度
 @param downloadFilePath 文件保存路径
 @param successful  返回路径内容
 @param failure 失败返回
 */
- (void)downloadUrl:(NSString *)url
           progress:(HttpProgress)progress
   downloadFilePath:(NSString *)downloadFilePath
            success:(void (^) (id responseObject))successful
            failure:(void (^) (NSError *error, ParamtersJudgeCode  judgeCode))failure;



/**
 下载文件接口

 @param url 请求接口
 @param progress 下载进度
 @param downloadFilePath 文件保存路径
 @param successful  返回路径内容
 @param failure 失败返回
 */
- (void)downloadUrl:(NSString *)url
        progress:(HttpProgress)progress
        downloadFilePath:(NSString *)downloadFilePath
        success:(void (^) (id responseObject))successful
        failure:(void (^) (NSError *error, ParamtersJudgeCode  judgeCode))failure
  {
    //下载地址
    NSURL *downloadURL = [NSURL URLWithString:url];
    //设置请求
    NSURLRequest *request = [NSURLRequest requestWithURL:downloadURL];
    //下载操作
    [_sessionManager downloadTaskWithRequest:request progress:^(NSProgress * _Nonnull downloadProgress) {
        //下载进度
        dispatch_sync(dispatch_get_main_queue(), ^{
            progress ? progress(downloadProgress) : nil;
        });
        
    } destination:^NSURL * _Nonnull(NSURL * _Nonnull targetPath, NSURLResponse * _Nonnull response) {
        //拼接缓存目录
        NSString *downloadPath = [[NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES) lastObject] stringByAppendingPathComponent:downloadFilePath ? downloadFilePath : @"Download"];
        //打开文件管理器
        NSFileManager *fileManager = [NSFileManager defaultManager];
        //创建Download目录
        [fileManager createDirectoryAtPath:downloadPath withIntermediateDirectories:YES attributes:nil error:nil];
        //拼接文件路径
        NSString *filePath = [downloadPath stringByAppendingPathComponent:response.suggestedFilename];
        //返回文件位置的URL路径
        return [NSURL fileURLWithPath:filePath];
    } completionHandler:^(NSURLResponse * _Nonnull response, NSURL * _Nullable filePath, NSError * _Nullable error) {
        NSInteger responseCode = [self showResponseCode:response];
        if (responseCode != 200) {
            successful ? successful(filePath.absoluteString): nil;
        }else {
            failure(error, UploadFailed);
        }
    }];
}


对于AFHTTPSessionManager的属性,我使用单利方式直接进行了配置。这里就不展示了,有需要的话可以去我的GitHub上查看即可。地址:传送
 

 




  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值