创建新工具类:
.h文件
#import <Foundation/Foundation.h>
@class AFNUploadParam;@interface AFNHttpTool : NSObject
/**
* 发送get请求
*
* @param URLString 请求的基本的url
* @param parameters 请求的参数字典
* @param success 请求成功的回调
* @param failure 请求失败的回调
*/
+ (void)GET:(NSString *)URLString
parameters:(id)parameters
success:(void (^)(id responseObject))success
failure:(void (^)(NSError *error))failure;
/**
* 发送post请求
*
* @param URLString 请求的基本的url
* @param parameters 请求的参数字典
* @param success 请求成功的回调
* @param failure 请求失败的回调
*/
+ (void)Post:(NSString *)URLString
parameters:(id)parameters
success:(void (^)(id responseObject))success
failure:(void (^)(NSError *error))failure;
/**
* 上传请求
*
* @param URLString 请求的基本的url
* @param parameters 请求的参数字典
* @param success 请求成功的回调
* @param failure 请求失败的回调
*/
+ (void)Upload:(NSString *)URLString
parameters:(id)parameters
uploadParam:(AFNUploadParam *)uploadParam
success:(void (^)(id responseObject))success
failure:(void (^)(NSError *error))failure;
@end
创建的AFNUploadParam;类:
.h文件
#import <Foundation/Foundation.h>
@interface AFNUploadParam : NSObject
/**
* 上传文件的二进制数据
*/
@property (nonatomic, strong) NSData *data;
/**
* 上传的参数名称
*/
@property (nonatomic, copy) NSString *name;
/**
* 上传到服务器的文件名称
*/
@property (nonatomic, copy) NSString *fileName;
/**
* 上传文件的类型
*/
@property (nonatomic, copy) NSString *mimeType;
@end
.m文件
#import "AFNUploadParam.h"
@implementation CZUploadParam
@end
再回到AFNHttpTool的.m文件
#import "AFNHttpTool.h"
#import "AFNetworking.h"
#import "AFNUploadParam.h"
@implementation CZHttpTool
+ (void)GET:(NSString *)URLString parameters:(id)parameters success:(void (^)(id))success failure:(void (^)(NSError *))failure
{
// 创建请求管理者
AFHTTPRequestOperationManager *mgr = [AFHTTPRequestOperationManager manager];
[mgr GET:URLString parameters:parameters success:^(AFHTTPRequestOperation *operation, id responseObject) {
// AFN请求成功时候调用block
// 先把请求成功要做的事情,保存到这个代码块
if (success) {
success(responseObject);
}
} failure:^(AFHTTPRequestOperation *operation, NSError *error) {
if (failure) {
failure(error);
}
}];
}
+ (void)Post:(NSString *)URLString parameters:(id)parameters success:(void (^)(id))success failure:(void (^)(NSError *))failure
{
// 创建请求管理者
AFHTTPRequestOperationManager *mgr = [AFHTTPRequestOperationManager manager];
[mgr POST:URLString parameters:parameters success:^(AFHTTPRequestOperation *operation, id responseObject) {
if (success) {
success(responseObject);
}
} failure:^(AFHTTPRequestOperation *operation, NSError *error) {
if (failure) {
failure(error);
}
}];
}
+ (void)Upload:(NSString *)URLString parameters:(id)parameters uploadParam:(AFNUploadParam *)uploadParam success:(void (^)(id))success failure:(void (^)(NSError *))failure
{
// 创建请求管理者
AFHTTPRequestOperationManager *mgr = [AFHTTPRequestOperationManager manager];
[mgr POST:URLString parameters:parameters constructingBodyWithBlock:^(id<AFMultipartFormData> formData) { // 上传的文件全部拼接到formData
/**
* FileData:要上传的文件的二进制数据
* name:上传参数名称
* fileName:上传到服务器的文件名称
* mimeType:文件类型
*/
[formData appendPartWithFileData:uploadParam.data name:uploadParam.name fileName:uploadParam.fileName mimeType:uploadParam.mimeType];
} success:^(AFHTTPRequestOperation *operation, id responseObject) {
if (success) {
success(responseObject);
}
} failure:^(AFHTTPRequestOperation *operation, NSError *error) {
if (failure) {
failure(error);
}
}];
}
@end
这时对于网络请求的工具类的封装。
当对应的业务类使用时:
截选
+ (void)composeWithStatus:(NSString *)status image:(UIImage *)image success:(void (^)())success failure:(void (^)(NSError *))failure
{
// 创建参数模型
AFNComposeParam *param = [AFNComposeParam param];
param.status = status;
// 创建上传的模型
AFNUploadParam *uploadP = [[AFNUploadParam alloc] init];
uploadP.data = UIImagePNGRepresentation(image);
uploadP.name = @"pic";
uploadP.fileName = @"image.png";
uploadP.mimeType = @"image/png";
// 注意:以后如果一个方法,要传很多参数,就把参数包装成一个模型
[AFNHttpTool Upload:@"https://upload.api.weibo.com/2/statuses/upload.json" parameters:param.keyValues uploadParam:uploadP success:^(id responseObject) {
if (success) {
success();
}
} failure:^(NSError *error) {
if (failure) {
failure(error);
}
}];
}
@end