Getting 500 internal error using MKNetworking PHP image upload

I switched from the usual way to download images (if it didn’t work then) to use MKNetworking to help me with the download process, im using this method because I found that I get better answers about errors and helps solve my problems. I got NSLog answer with error reading

2013-05-03 10:52:25.961 atmebeta[2420:907] Returning num rows 2013-05-03 10:52:25.967 atmebeta[2420:907] Returning num sections 2013-05-03 10:52:34.607 atmebeta[2420:907] -[MKNetworkEngine reachabilityChanged:] [Line 198] Server [atmeapp.com] is reachable via Wifi 2013-05-03 10:52:37.066 atmebeta[2420:907] -[MKNetworkOperation operationFailedWithError:] [Line 1345] Friday, May 3, 2013, 10:52:37 AM Pacific Daylight Time Request ------- curl -X POST "http://atmeapp.com/addavatar.php" -d " email=ooo@ooo.com " -------- Response -------- <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title></title> <link rel="stylesheet" type="text/css" href="css/main.css" /> <!--[if lt IE 9]> <link rel="stylesheet" type="text/css" href="css/ie_8.css" /> <![endif]--> </head> <body> <div id="block_error"> <div> <h2>Error 500 Internal Server Error</h2> <p>The web server is misconfigured please contact aaron@teknologenie.com </p> <p>Please try to access the site later.</p> </div> </div> </body> </html> , [The operation couldn't be completed. (NSURLErrorDomain error 500.)] 2013-05-03 10:52:37.072 atmebeta[2420:907] Error Domain=NSURLErrorDomain Code=500 "The operation couldn't be completed. (NSURLErrorDomain error 500.)" UserInfo=0x1d993d40 {Accept-Ranges=bytes, Server=Apache, Content-Length=693, Content-Type=text/html, Date=Fri, 03 May 2013 17:52:34 GMT} 2013-05-03 10:52:37.102 atmebeta[2420:907] -[MKNetworkOperation operationFailedWithError:] [Line 1353] State: 0 

I can successfully upload images via the html form, so I'm sure my php.ini is ok and they are allowed to upload the path more than what I requested to upload to my iPhone.

FileUploadDemoViewController.h

 // // fileUploadDemoViewController.h // fileUploader // // Created by Michael Roling on 5/7/12. // Copyright (c) 2012 NA. All rights reserved. // #import <UIKit/UIKit.h> #import "fileUploadEngine.h" @interface fileUploadDemoViewController : UIViewController <UIActionSheetDelegate, UIImagePickerControllerDelegate, UINavigationControllerDelegate> @property (strong, nonatomic) fileUploadEngine *flUploadEngine; @property (strong, nonatomic) MKNetworkOperation *flOperation; @end 

FileUploadDemoViewController.m

 // // fileUploadDemoViewController.m // fileUploader // // Created by Michael Roling on 5/7/12. // Copyright (c) 2012 NA. All rights reserved. // #import "fileUploadDemoViewController.h" #import "MyClass.h" @interface fileUploadDemoViewController () @end @implementation fileUploadDemoViewController @synthesize flUploadEngine = _flUploadEngine; @synthesize flOperation = _flOperation; - (void)viewDidLoad { [super viewDidLoad]; // Do any additional setup after loading the view, typically from a nib. } - (void)viewDidUnload { [super viewDidUnload]; // Release any retained subviews of the main view. } - (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation { return (interfaceOrientation != UIInterfaceOrientationPortraitUpsideDown); } - (IBAction)uploadPhoto:(id)sender { UIActionSheet *photoSourcePicker = [[UIActionSheet alloc] initWithTitle:nil delegate:self cancelButtonTitle:@"Cancel" destructiveButtonTitle:nil otherButtonTitles: @"Take Photo", @"Choose from Library", nil, nil]; [photoSourcePicker showInView:self.view]; } - (void)actionSheet:(UIActionSheet *)modalView clickedButtonAtIndex:(NSInteger)buttonIndex { switch (buttonIndex) { case 0: { if ([UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypeCamera]) { UIImagePickerController *imagePicker = [[UIImagePickerController alloc] init]; imagePicker.sourceType = UIImagePickerControllerSourceTypeCamera; imagePicker.delegate = self; imagePicker.cameraFlashMode = UIImagePickerControllerCameraFlashModeOff; imagePicker.allowsEditing = YES; [self presentViewController:imagePicker animated:YES completion:NULL]; } else { UIAlertView *alert; alert = [[UIAlertView alloc] initWithTitle:@"Error" message:@"This device doesn't have a camera." delegate:self cancelButtonTitle:@"Ok" otherButtonTitles:nil]; [alert show]; } break; } case 1: { if ([UIImagePickerController isSourceTypeAvailable:UIImagePickerControllerSourceTypePhotoLibrary]) { UIImagePickerController *imagePicker = [[UIImagePickerController alloc] init]; imagePicker.sourceType = UIImagePickerControllerSourceTypePhotoLibrary; imagePicker.delegate = self; imagePicker.allowsEditing = YES; [self presentViewController:imagePicker animated:YES completion:NULL]; } else { UIAlertView *alert; alert = [[UIAlertView alloc] initWithTitle:@"Error" message:@"This device doesn't support photo libraries." delegate:self cancelButtonTitle:@"Ok" otherButtonTitles:nil]; [alert show]; } break; } } } - (void) imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info { [self dismissViewControllerAnimated:YES completion:NULL]; NSData *image = UIImageJPEGRepresentation([info objectForKey:UIImagePickerControllerOriginalImage], 0.1); self.flUploadEngine = [[fileUploadEngine alloc] initWithHostName:@"http://www.atmeapp.com" customHeaderFields:nil]; NSMutableDictionary *postParams = [NSMutableDictionary dictionaryWithObjectsAndKeys: [MyClass str], @"email", nil]; self.flOperation = [self.flUploadEngine postDataToServer:postParams path:@"/addavatar.php" ]; [self.flOperation addData:UIImageJPEGRepresentation(image, 0.5) forKey:@"userfile" mimeType:@"image/jpeg" fileName:image]; [self.flOperation addCompletionHandler:^(MKNetworkOperation* operation) { NSLog(@"%@", [operation responseString]); /* This is where you handle a successful 200 response */ } errorHandler:^(MKNetworkOperation *errorOp, NSError* error) { NSLog(@"%@", error); UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Error" message:[error localizedDescription] delegate:nil cancelButtonTitle:@"Dismiss" otherButtonTitles:nil]; [alert show]; }]; [self.flUploadEngine enqueueOperation:self.flOperation ]; } @end 

fileUploadEngine.h

 // // fileUploadEngine.h // fileUploader // // Created by Michael Roling on 5/7/12. // Copyright (c) 2012 NA. All rights reserved. // #import "MKNetworkEngine.h" @interface fileUploadEngine : MKNetworkEngine -(MKNetworkOperation *) postDataToServer:(NSMutableDictionary *)params path:(NSString *)path; @end 

fileUploadEngine.m

 // // fileUploadEngine.m // fileUploader // // Created by Michael Roling on 5/7/12. // Copyright (c) 2012 NA. All rights reserved. // #import "fileUploadEngine.h" @implementation fileUploadEngine -(MKNetworkOperation *) postDataToServer:(NSMutableDictionary *)params path:(NSString *)path { MKNetworkOperation *op = [self operationWithPath:path params:params httpMethod:@"POST" ssl:NO]; return op; } @end 

and last but not least, my php

 $mysqli = new mysqli($host, $username, $password, $database); if ($stmt = $mysqli->prepare("UPDATE `user` SET imagepath=? WHERE email=?")) { $stmt->bind_param('ss', $albumname, $email); $email = $_POST['email']; $uploaddir = 'images/users/'; $file = basename($_FILES['userfile']['name']); $uploadfile = $uploaddir . $file; if (move_uploaded_file($_FILES['userfile']['tmp_name'], $uploadfile)) { } $albumname = $uploadfile; $stmt->execute(); $stmt->close(); } else { printf("Prepared Statement Error: %s\n", $mysqli->error); } $mysqli->close(); 

im not getting errors in php logs on my servers,

+4
source share
2 answers

I solved my problem by switching to AFNetwork heres my new code

 - (void) imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info { image.image = [info objectForKey:UIImagePickerControllerOriginalImage]; [self->image setImage:image.image]; [self dismissViewControllerAnimated:YES completion:NULL]; NSURL *url = [NSURL URLWithString:@"http://atmeapp.com"]; AFHTTPClient *httpClient = [[AFHTTPClient alloc] initWithBaseURL:url]; NSData *imageData = UIImageJPEGRepresentation(image.image, 1); NSDictionary *params = [NSDictionary dictionaryWithObjectsAndKeys: @"email", [MyClass str], nil]; NSMutableURLRequest *request = [httpClient multipartFormRequestWithMethod:@"POST" path:@"/addavatar.php" parameters:params constructingBodyWithBlock: ^(id <AFMultipartFormData>formData) { [formData appendPartWithFileData:imageData name:@"userfile" fileName:[MyClass str] mimeType:@"image/jpeg"]; }]; AFHTTPRequestOperation *operation = [[AFHTTPRequestOperation alloc] initWithRequest:request]; [operation setUploadProgressBlock:^(NSUInteger bytesWritten, long long totalBytesWritten, long long totalBytesExpectedToWrite) { NSLog(@"Sent %lld of %lld bytes", totalBytesWritten, totalBytesExpectedToWrite); }]; [httpClient enqueueHTTPRequestOperation:operation]; } 

im not sure why this worked, but what ... very annoying. Thanks for all the time.

+1
source

It looks mostly correct, I just downloaded MkNetworkKit / image in php. The only thing I see here is the line

 [NSMutableDictionary dictionaryWithObjectsAndKeys: @"email", [MyClass str] 

You probably want to switch @ "email" and [MyClass str], when using the WithObjectsAndKeys dictionary, the values ​​should appear before the key.

Here is my implementation (inside a subclass of MKNetworkEngine):

 -(MKNetworkOperation*) uploadImage:(UIImage*)image onSuccess:(EmptyBlock)successBlock onError:(MKNKErrorBlock)errorBlock { NSMutableDictionary *params = [[NSDictionary dictionary]mutableCopy]; [params setValue:@"[YOUR_VALUE]" forKey:@"[YOUR_KEY]"]; MKNetworkOperation *op = [self operationWithPath:@"[YOUR_PATH]" params:params httpMethod:@"POST"]; [op addData:UIImageJPEGRepresentation(image, 0.5) forKey:@"userfile" mimeType:@"image/jpeg" fileName:@"[YOUR_FILENAME]"]; [op onCompletion:^(MKNetworkOperation *completedOperation) { if(successBlock) { successBlock(); } } onError:^(NSError *error) { TFLog(@"RCNetworkEngine.uploadError:%@, error:%@", url, [error localizedDescription]); if(errorBlock) errorBlock(error); }]; [self enqueueOperation:op]; return op; } 
+1
source

All Articles