iOS 使用formData 上传图片
2016-11-12 20:30
357 查看
上周接口让我们以表单的方式上传图片,初听有点陌生,后来发现使用AFN就可以搞定;
二、详细代码
为了让大家更清晰,这里po上我们java端的代码处理:
1、记得这里拼接的是NSData 格式,而不是UIImage 或者base64Code
2、拼接多张图片,循环append即可。图片过大可能上传失败,和服务器设置有关。
3、返回的数据可能是二进制代码,这里进行解析。
一、核心代码:
[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); }]; }
相关文章推荐
- 使用FormData对象提交表单及上传图片
- java接收IOS上传的图片文件multipart/form-data类型
- FormData实现上传多图片,学习使用FormData
- iOSBase64POST上传图片和FormData方式比较
- ajax 请求后台数据(及使用FormData对象提交表单及上传图片)
- 使用form-data表单上传图片
- iOSBase64POST上传图片和FormData方式比较
- 使用FormData进行Ajax请求异步上传图片案例
- 使用FormData对象提交表单及上传图片
- 使用FormData对象提交表单及上传图片
- php+html5使用FormData对象提交表单及上传图片的方法
- 使用FormData对象提交表单及上传图片
- FormData实现上传多图片,学习使用FormData
- vuejs使用FormData对象,ajax上传图片文件
- PHP结合HTML5使用FormData对象提交表单及上传图片
- 使用FormData对象提交表单及上传图片
- laravel上传图片调用接口,使用formData 上传图片 展示在本页面
- JS中使用FormData上传文件、图片的方法
- FormData使用,上传图片和对象信息(参考代码)
- Swift使用Alamofire上传图片等FormData表单文件的方法