使用第三方网络请求ASIHTTPRequest中的ASIFormDataRequest进行网络请求,包括上传,下载。
使用代码块模式,用户可自定义请求模式,即GET,或POST。同时可根据请求参数中是否包含文件,而进行文件的上传处理。
实现代码如下
.h文件
#import <Foundation/Foundation.h>
#import "ASIFormDataRequest.h"
/****************************************************************/
//文件信息
@interface FileModal :NSObject
@property (nonatomic,strong)NSString *fileName;//文件名称
@property (nonatomic,strong)NSString *filePath;//文件路径
@end
/****************************************************************/
@interface NetRequest :NSObject
/// 单例
+ (NetRequest *)shareManager;
///发送请求(成功,失败)
- (ASIFormDataRequest *)requestWithUrl:(NSString *)urlString
parameter:(NSDictionary *)parameter
didFinished:(void (^)(id obj))finishedBlock
didFailed:(void (^)(NSError *error))failedBlock;
@end
.m文件
#import "NetRequest.h"
/****************************************************************/
//文件信息
@implementation FileModal
@end
/****************************************************************/
@implementation NetRequest
+ (NetRequest *)shareManager
{
staticNetRequest *requestShare;
staticdispatch_once_t once;
dispatch_once(&once, ^{
requestShare = [[selfalloc]init];
});
return requestShare;
}
///发送请求(成功,失败)
- (ASIFormDataRequest *)requestWithUrl:(NSString *)urlString
parameter:(NSDictionary *)parameter
didFinished:(void (^)(id obj))finishedBlock
didFailed:(void (^)(NSError *error))failedBlock
{
if (!urlString ||0 >= urlString.length)
{
returnnil;
}
// 创建请求 __block在非ARC下时使用,而ARC下则用__weak
NSURL *url = [NSURLURLWithString:urlString];
__weakASIFormDataRequest *request = [ASIFormDataRequestrequestWithURL:url];
//设置请求模式,根据有无参数情况
NSString *requestMethod = (!parameter ?@"GET" :@"POST");
request.requestMethod = requestMethod;
// 设置请求超时
request.timeOutSeconds =30.0;
// 参数设置
for (NSString *keyin parameter.allKeys)
{
id valueObj = [parameterobjectForKey:key];
if ([valueObjisKindOfClass:[FileModalclass]])
{
// 上传文件
FileModal *fileModal = (FileModal *)valueObj;
NSString *filePath = fileModal.filePath;
NSString *fileName = [filePathsubstringFromIndex:[filePathrangeOfString:@"/"options:NSBackwardsSearch].location +1];
[request setFile:filePathwithFileName:fileNameandContentType:@"multipart/form-data"forKey:key];
}
else
{
[request setPostValue:valueObjforKey:key];
}
}
// 设置请求成功时
[request setCompletionBlock:^{
#if NS_BLOCKS_AVAILABLE
if (finishedBlock)
{
NSData *data = [requestresponseData];
NSDictionary *dict = [NSJSONSerializationJSONObjectWithData:dataoptions:NSJSONReadingAllowFragmentserror:nil];
finishedBlock(dict);
}
#endif
}];
// 设置请求失败时
[request setFailedBlock:^{
#if NS_BLOCKS_AVAILABLE
if (failedBlock)
{
NSError *error = request.error;
failedBlock(error);
}
#endif
}];
// 发送异步请求
[request startAsynchronous];
return request;
}
@end
使用
1 导入头文件
#import "NetRequest.h"
2 使用
注意内存管理,即相互引用
__weak 当前类名称 weakSelf = self;
[[NetRequestshareManager]requestWithUrl:nilparameter:nildidFinished:^(id obj) {
// 请求完成
} didFailed:^(NSError *error) {
// 请求失败
}];