AFNetWorking是一个构建在NSURLConnection和NSOperation的轻型网络库,可以方便的实现各种网络请求,比如最常见的http(https)的post、get请求、图片的上传等,下面详细介绍使用方法:
一、将AFNetworking导入项目中(最好使用cocoapods来管理),并添加头文件: "AFNetworking.h"
二、网络数据请求:
1) 、GET方式请求网络数据:
AFHTTPSessionManager *manager = [AFHTTPSessionManagermanager]; //网络回话对象,所有的网络请求均由该对象发起早期保本是AFHTTPRequestOperationManger
manager.responseSerializer = [AFHTTPResponseSerializerserializer]; //设置返回的数据类型为json
NSMutableDictionary *paraDic = @{@"key": @"value"};
[manager GET:[NSStringstringWithFormat:@"%@%@",BASE_URL, url] parameters:paraDicprogress:^(NSProgress *_Nonnull downloadProgress) {
progressBlock(downloadProgress);
} success:^(NSURLSessionDataTask *_Nonnull task,id _Nullable responseObject) {
NSDictionary *dic = [NSJSONSerializationJSONObjectWithData:responseObjectoptions:NSJSONReadingMutableContainerserror:nil];
//dic就是从后台返回的数据
} failure:^(NSURLSessionDataTask *_Nullable task,NSError *_Nonnull error) {
//数据请求失败
}
}];
POST请求和GET是一样的,只需要把1)的GET改为POST就可以了。
3)、图片上传
先看看图片上传api:
- (nullableNSURLSessionDataTask *)POST:(NSString *)URLString
parameters:(nullableid)parameters
constructingBodyWithBlock:(nullablevoid (^)(id <AFMultipartFormData> formData))block
progress:(nullablevoid (^)(NSProgress *uploadProgress)) uploadProgress
success:(nullablevoid (^)(NSURLSessionDataTask *task,id _Nullable responseObject))success
failure:(nullablevoid (^)(NSURLSessionDataTask *_Nullable task, NSError *error))failure;
我想除了 constructingBodyWithBlock,其他的你都看得懂,但对于图片上传,这个参数才是关键,先看图片是怎么上传的:
AFHTTPSessionManager *manager = [AFHTTPSessionManagermanager];
manager.requestSerializer = [AFHTTPRequestSerializerserializer];
manager.responseSerializer = [AFHTTPResponseSerializerserializer];
NSData *data = UIImageJPEGRepresentation(view.thumbImageView.image,1);
[manager POST:URL parameters:nilconstructingBodyWithBlock:^(id<AFMultipartFormData> _Nonnull formData) {
[formData appendPartWithFileData:data
name:@"avatar"
fileName:fileName
mimeType:@"image/jpeg"];
} progress:^(NSProgress *_Nonnull uploadProgress) {
} success:^(NSURLSessionDataTask *_Nonnull task,id _Nullable responseObject) {
} failure:^(NSURLSessionDataTask *_Nullable task,NSError *_Nonnull error) {
}];
解析一下上面红色部分代码:data:就是带上传图片二进制数据
name:是服务器存放图片的文件夹
fileName:文件的名字,一般使用提交文件的当前NSdate的string(注意文件名需要带文件的格式,比如jpg)
mimeType:资源的媒体类型
4、一次上传多张图片
只需循环添加图片到上传的数据即可:
for (int i =0; i <_picArray.count; i++) {
[formData appendPartWithFileData:_picArray[i]
name:[NSStringstringWithFormat:@"pic%d", i]
fileName:[NSStringstringWithFormat:@"avatar%d.jpg", i]
mimeType:@"image/jpeg"];
}
注意,参数name不能相同,看到有i了吧,fileName也是,否者只能看到上传成功一张