同时向服务端传送参数+图片。
方法upload第一种方法:
都需要添加到constructingBodyWithBlock:^(id<AFMultipartFormData> formData)中。
原理:服务端截取的写法。这个需要调适
//如果有需要打点或附加的参数,在此处添加
NSDictionary *param =nil;
param = [NSDictionarydictionaryWithObjectsAndKeys:@{@"agent":@"X-IOS",@"version":[[UIDevicecurrentDevice] systemVersion],@"device":[[UIDevicecurrentDevice] model],@"local":country,@"mac":macToken},@"header",
@{@"params":@""},@"request",nil];
[_manager POST:url
parameters:nil
constructingBodyWithBlock:^(id<AFMultipartFormData> formData){
if ([imageArraycount]>0) {
for (NSInteger i=0; i < [imageArraycount];i++) {
id data = imageArray[i];
if ([dataisKindOfClass:UIImage.class]) {
NSData *imageData =UIImageJPEGRepresentation(data,0.01);
NSString *fileName = [NSStringstringWithFormat:@"file%ld.jpg",(long)i];
[formData appendPartWithFileData:imageDataname:@"uploadFile"fileName:fileName mimeType:@"image/jpeg"];
}
}
}
NSData *data = [NSJSONSerializationdataWithJSONObject:paramoptions:NSJSONWritingPrettyPrintederror:nil];
[formData appendPartWithFormData:dataname:@"params"];
}
success:^(AFHTTPRequestOperation *operation,id responseObject) {
}
failure:^(AFHTTPRequestOperation *operation,NSError *error) {
}
];
方法upload第二种方法:
/**
* AFN 3.0 上传
* 有两种方式
* upLoad1 和 upLoad2
*/
//第一种方法是通过工程中的文件进行上传
- (void)upLoad1{
//1。创建管理者对象
AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];
//2.上传文件
NSDictionary *dict = @{@"username":@"1234"};
NSString *urlString = @"22222";
[manager POST:urlString parameters:dict constructingBodyWithBlock:^(id<AFMultipartFormData> _Nonnull formData) {
//上传文件参数
UIImage *iamge = [UIImage imageNamed:@"123.png"];
NSData *data = UIImagePNGRepresentation(iamge);
//这个就是参数
[formData appendPartWithFileData:data name:@"file" fileName:@"123.png" mimeType:@"image/png"];
} progress:^(NSProgress * _Nonnull uploadProgress) {
//打印下上传进度
WKNSLog(@"%lf",1.0 *uploadProgress.completedUnitCount / uploadProgress.totalUnitCount);
} success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) {
//请求成功
WKNSLog(@"请求成功:%@",responseObject);
} failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
//请求失败
WKNSLog(@"请求失败:%@",error);
}];
}
方法upload第三种方法:
//第二种是通过URL来获取路径,进入沙盒或者系统相册等等
- (void)upLoda2{
//1.创建管理者对象
AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];
//2.上传文件
NSDictionary *dict = @{@"username":@"1234"};
NSString *urlString = @"22222";
[manager POST:urlString parameters:dict constructingBodyWithBlock:^(id<AFMultipartFormData> _Nonnull formData) {
[formData appendPartWithFileURL:[NSURL fileURLWithPath:@"文件地址"] name:@"file" fileName:@"1234.png" mimeType:@"application/octet-stream" error:nil];
} progress:^(NSProgress * _Nonnull uploadProgress) {
//打印下上传进度
WKNSLog(@"%lf",1.0 *uploadProgress.completedUnitCount / uploadProgress.totalUnitCount);
} success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) {
//请求成功
WKNSLog(@"请求成功:%@",responseObject);
} failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {
//请求失败
WKNSLog(@"请求失败:%@",error);
}];
}
来源:http://www.jianshu.com/p/11bb0d4dc649