如何在base64中上传图像的多部分数据使用networking
我已经使用了下面的代码,但我得到的响应是java.lang.NullPointerException
& INTERNAL_SERVER_ERROR
我尝试了很多不同的方法,但无法修复它,请帮助解决这个问题。
从图像select器获取图像
UIImage *chosenImage = info[UIImagePickerControllerEditedImage]; Profilebackground.image = chosenImage; [picker dismissViewControllerAnimated:YES completion:NULL]; NSURL *resourceURL; UIImage *image =[[UIImage alloc] init]; image =[info objectForKey:@"UIImagePickerControllerOriginalImage"]; NSURL *imagePath = [info objectForKey:@"UIImagePickerControllerReferenceURL"]; imageName = [imagePath lastPathComponent]; resourceURL = [info objectForKey:UIImagePickerControllerReferenceURL]; NSString *extensionOFImage =[imageName substringFromIndex:[imageName rangeOfString:@"."].location+1 ]; if ([extensionOFImage isEqualToString:@"JPG"]) { imageData =UIImageJPEGRepresentation(image, 1.0); base64 = [imageData base64EncodedStringWithOptions:NSDataBase64Encoding64CharacterLineLength]; extension=@"image/jpeg"; } else { imageData = UIImagePNGRepresentation(image); base64 = [imageData base64EncodedStringWithOptions:NSDataBase64Encoding64CharacterLineLength]; extension=@"image/png"; } int imageSize=imageData.length/1024; NSLog(@"imageSize--->%d", imageSize); if (imageName!=nil) { NSLog(@"imageName--->%@",imageName); } else { NSLog(@"no image name found"); }
将图像发送到服务器
AFHTTPSessionManager *manager = [AFHTTPSessionManager manager]; manager.responseSerializer = [AFJSONResponseSerializer serializer]; [manager POST:@"https://blahblahblah.com/uploadProfileImg?userId=1" parameters:nil constructingBodyWithBlock:^(id<AFMultipartFormData> formData) { //NSData *pngData = [[NSData alloc] initWithBase64EncodedString:base64 options:1]; [formData appendPartWithFileData:imageData name:@"key" fileName:imageName mimeType:extension]; } success:^(NSURLSessionDataTask *task, id responseObject) { NSLog(@"Response: %@", responseObject); } failure:^(NSURLSessionDataTask *task, NSError *error) { NSHTTPURLResponse *response = (NSHTTPURLResponse *)task.response; NSLog(@"error: %@",error); // NSHTTPURLResponse *response = (NSHTTPURLResponse *)operation.response; NSLog(@"statusCode: %ld", (long)response.statusCode); NSString* ErrorResponse = [[NSString alloc] initWithData:(NSData *)error.userInfo[AFNetworkingOperationFailingURLResponseDataErrorKey] encoding:NSUTF8StringEncoding]; NSLog(@"Error Response:%@",ErrorResponse); }];
您可以使用AFMultipartFormData
类的appendPartWithFileData:name:fileName:mimeType:
方法。
例如:
AFHTTPSessionManager *manager = [AFHTTPSessionManager manager]; [manager POST:@"https://blahblahblah.com/imageupload" parameters:nil constructingBodyWithBlock:^(id<AFMultipartFormData> formData) { [formData appendPartWithFileData:imageData name:@"key name for the image" fileName:photoName mimeType:@"image/jpeg"]; } success:^(NSURLSessionDataTask *task, id responseObject) { NSLog(@"Response: %@", responseObject); } failure:^(NSURLSessionDataTask *task, NSError *error) { NSLog(@"Error: %@", error); }];
Please try the below code in AFNetworking 2.0.3 Hope this will helpful for u - (void) createNewAccount:(NSString *)nickname accountType:(NSInteger)accountType primaryPhoto:(UIImage *)primaryPhoto { // Ensure none of the params are nil, otherwise it'll mess up our dictionary if (!nickname) nickname = @""; NSLog(@"Creating new account %@", params); [self POST:@"accounts" parameters:nil constructingBodyWithBlock:^(id<AFMultipartFormData> formData) { [formData appendPartWithFormData:[nickname dataUsingEncoding:NSUTF8StringEncoding] name:@"nickname"]; [formData appendPartWithFormData:[NSData dataWithBytes:&accountType length:sizeof(accountType)] name:@"type"]; if (self.accessToken) [formData appendPartWithFormData:[self.accessToken dataUsingEncoding:NSUTF8StringEncoding] name:@"access_token"]; if (primaryPhoto) { [formData appendPartWithFileData:UIImageJPEGRepresentation(primaryPhoto, 1.0) name:@"primary_photo" fileName:@"image.jpg" mimeType:@"image/jpeg"]; } } success:^(NSURLSessionDataTask *task, id responseObject) { NSLog(@"Created new account successfully"); } failure:^(NSURLSessionDataTask *task, NSError *error) { NSLog(@"Error: couldn't create new account: %@", error); }]; }
最后我做了工作
AFHTTPSessionManager *manager = [AFHTTPSessionManager manager]; manager.responseSerializer = [AFJSONResponseSerializer serializer]; [manager POST:@"https://blahblahblah.com/uploadProfileImg?userId=1" parameters:nil constructingBodyWithBlock:^(id<AFMultipartFormData> formData) { [formData appendPartWithFileData:imageData name:@"key" fileName:imageName mimeType:extension]; } success:^(NSURLSessionDataTask *task, id responseObject) { NSLog(@"Response: %@", responseObject); } failure:^(NSURLSessionDataTask *task, NSError *error) { NSHTTPURLResponse *response = (NSHTTPURLResponse *)task.response; NSLog(@"error: %@",error); NSLog(@"statusCode: %ld", (long)response.statusCode); NSString* ErrorResponse = [[NSString alloc] initWithData:(NSData *)error.userInfo[AFNetworkingOperationFailingURLResponseDataErrorKey] encoding:NSUTF8StringEncoding]; NSLog(@"Error Response:%@",ErrorResponse); }];