您的位置:首页 > 移动开发 > IOS开发

iOS 使用formData 上传图片

2016-11-12 20:30 357 查看
上周接口让我们以表单的方式上传图片,初听有点陌生,后来发现使用AFN就可以搞定;

一、核心代码:

[manager POST:uploadImagePath parameters:nil constructingBodyWithBlock:^(id<AFMultipartFormData>  _Nonnull formData) {

// 上传filename
NSString * fileName = [NSString stringWithFormat:@"imageIOS%ld.jpg", (long)i];
[formData appendPartWithFileData:imageData name:@"myFile" fileName:fileName mimeType:@"image/jpeg"];

} progress:^(NSProgress * _Nonnull uploadProgress) {

} success:^(NSURLSessionDataTask * _Nonnull task, id  _Nullable responseObject) {

} failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {

}];


二、详细代码

为了让大家更清晰,这里po上我们java端的代码处理:



1、记得这里拼接的是NSData 格式,而不是UIImage 或者base64Code

2、拼接多张图片,循环append即可。图片过大可能上传失败,和服务器设置有关。

3、返回的数据可能是二进制代码,这里进行解析。

- (void)requestUploadImages:(NSArray *)imageDataArray
success:(void (^)(NSString *imageUploadPath))success
failure:(void (^)(NSURLSessionDataTask *operation, NSError *error))failure{

NSString *uploadImagePath =  [self getJAVAAllLocationURL:@"ImageUpload"];
NSLog(@"uploadImagePath - %@",uploadImagePath);

AFHTTPSessionManager *manager = [AFHTTPSessionManager manager];
manager.responseSerializer = [AFHTTPResponseSerializer serializer];

[manager POST:uploadImagePath parameters:nil constructingBodyWithBlock:^(id<AFMultipartFormData>  _Nonnull formData) {

//上传 多张图片
for(NSInteger i = 0; i < imageDataArray.count; i++){

NSData *imageData = [imageDataArray objectAtIndex: i];

// 上传filename
NSString * fileName = [NSString stringWithFormat:@"imageIOS%ld.jpg", (long)i];
[formData appendPartWithFileData:imageData name:@"myFile" fileName:fileName mimeType:@"image/jpeg"];
}

} progress:^(NSProgress * _Nonnull uploadProgress) {

//        NSLog(@"\n\n --------------- \n\n progress : %@",uploadProgress);

} success:^(NSURLSessionDataTask * _Nonnull task, id  _Nullable responseObject) {

NSLog(@"\n\n --------------- \n\n responseObject:%@ \n\n --------------- \n\n ",responseObject);

NSString *responseStr = [[NSString alloc] initWithData:(NSData *)responseObject  encoding:NSUTF8StringEncoding];

NSLog(@"\n\n --------------- \n\n success responseStr: %@   \n\n --------------- \n\n",responseStr);

NSData *jsonData = [responseStr dataUsingEncoding:NSUTF8StringEncoding];
NSError *err;
NSDictionary *responseDict = [NSJSONSerialization JSONObjectWithData:jsonData
options:NSJSONReadingMutableContainers
error:&err];

if(err) {
NSLog(@"json解析失败:%@",err);
success(@"");
return ;
}

success(@"");
return ;

} failure:^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) {

NSLog(@"\n\n --------------- \n\n failure : %@",error);

}];

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: