kamalbhai
kamalbhai

Reputation: 520

Upload A File Into A Server - Objective C/Xcode/Mediawiki

I want to upload a UIImage into a server. For this I am using the following lines of code ::

- (void)imagePickerController:(UIImagePickerController *)picker 
    didFinishPickingImage:(UIImage *)image
              editingInfo:(NSDictionary *)editingInfo
{


imageView.image = image;    

NSData *pngData = UIImagePNGRepresentation(imageView.image);

NSString *imageFile = @"image.png";   
NSString *docDir = [NSHomeDirectory() stringByAppendingPathComponent:@"Documents"];
NSString *filePath = [docDir stringByAppendingPathComponent:imageFile]; 
NSString *dataIS=[NSString base64StringFromData:pngData length:[pngData length]];
[pngData writeToFile:filePath atomically:YES];






NSMutableURLRequest *request = [[NSMutableURLRequest alloc] init];
[request setURL:[NSURL URLWithString:urlString]];
[request setHTTPMethod:@"POST"];


NSString *boundary = [NSString stringWithString:@"---------------------------14737809831466499882746641449"];
NSString *contentType = [NSString stringWithFormat:@"multipart/form-data; boundary=%@",boundary];
[request addValue:contentType forHTTPHeaderField: @"Content-Type"];


NSMutableData *body = [NSMutableData data];
[body appendData:[[NSString stringWithFormat:@"\r\n--%@\r\n",boundary] dataUsingEncoding:NSUTF8StringEncoding]];    
[body appendData:[[NSString stringWithString:@"Content-Disposition: form-data; name=\"image\"; filename=\"image.png\"\r\n"] dataUsingEncoding:NSUTF8StringEncoding]];
[body appendData:[[NSString stringWithString:@"Content-Type: application/octet-stream\r\n\r\n"] dataUsingEncoding:NSUTF8StringEncoding]];
[body appendData:[NSData dataWithData:pngData]];
[body appendData:[[NSString stringWithFormat:@"\r\n--%@--\r\n",boundary] dataUsingEncoding:NSUTF8StringEncoding]];
// setting the body of the post to the reqeust
[request setHTTPBody:body];


NSData *returnData = [NSURLConnection sendSynchronousRequest:request returningResponse:nil error:nil];
NSString *returnString = [[NSString alloc] initWithData:returnData encoding:NSUTF8StringEncoding];


[self.parentViewController dismissModalViewControllerAnimated:YES];

}

But, I am getting the following error in gdb ::

Your request could not be processed. Request could not be handled.

I am also confused over the proper use of urlString i.e. I am doubtful over my correct use of it.

If I however use the following urlString, I am able to upload my image file into the server ::

NSString *urlString = [NSString stringWithFormat:@"http://xxxx.com/mediawiki/api.php?action=upload&filename=image.png&url=%@&token=%@", url, token] ;

With reference to the API for mediawiki (http://www.mediawiki.org/wiki/API:Upload), can someone help me to sort it out ?? Thanks and Regards.

Upvotes: 0

Views: 9884

Answers (4)

Krushankant
Krushankant

Reputation: 69

I have same problem to upload multiple images and data but i am use AFNetworking class and Upload multiple images into server.

NSURL *URL = [NSURL URLWithString:[NSString stringWithFormat:@"your URL"]];


AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager];
path = [[NSString alloc] initWithString:[URL absoluteString]];
vdict = @{
            // Your Parameter Pass
        };

[self checkmultiple:vdict];


-(void)checkmultiple:(NSDictionary*)vdict
{

AFHTTPRequestOperation *op = [manager POST:path parameters:vdict constructingBodyWithBlock:^(id<AFMultipartFormData> formData)
                              {
                                  for(i = 0;i<[appDelegate.gblarrydata count];i++)
                                  {
                                      NSString *paths = [[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES)objectAtIndex:0]stringByAppendingPathComponent:@"New Folder"];
                                      // NSLog(@"%@",paths);
                                      NSString *documentsDirectory = paths;

                                      NSString *getImagePath = [documentsDirectory stringByAppendingPathComponent:[[appDelegate.gblarrydata objectAtIndex:i]valueForKey:@"nameimage"]];

                                      NSData *data1 =[[NSData alloc]initWithContentsOfFile:getImagePath];
                                      NSString *data2 =[[appDelegate.gblarrydata objectAtIndex:i] valueForKey:@"Note"];

                                      [formData appendPartWithFileData:data1 name:[NSString stringWithFormat:@"pimage%d",i+1] fileName:[NSString stringWithFormat:@"pimage%d.jpg",i+1] mimeType:@"image/jpeg"];

                                      if(![data2 isEqualToString:@""])
                                      {
                                          [formData appendPartWithFormData:[data2 dataUsingEncoding:NSUTF8StringEncoding]
                                                                      name:[NSString stringWithFormat:@"pnotes%d",i+1]];
                                      }


                                  }


                              }
                             success:^(AFHTTPRequestOperation *operation, id responseObject)
                              {
                                  NSLog(@"Upload success");

                                  NSString *returnString = [NSString stringWithFormat:@"%@",[responseObject JSONRepresentation]];
                                  NSLog(@"Reg Date:%@",returnString);

                              }

                             failure:^(AFHTTPRequestOperation *operation, NSError *error)
                              {
                                  NSLog(@"Error:%@",error);
                              }];
[op start];

} 

Upvotes: 2

arturo acosta
arturo acosta

Reputation: 1

// UIImage * img = [UIImage imageNamed:@"min.png"];

// NSData *imageData = UIImageJPEGRepresentation(img,0.2);

NSString *strUrl =[NSString stringWithFormat:@"%@/upload_file.php", [globalApp sharedUser].vg_dominio ];
//strUrl = @"http://192.168.1.100/mismedicinas/upload_file.php";

NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:strUrl]];
request.HTTPMethod = @"POST";
request.timeoutInterval = 60;
request.HTTPShouldHandleCookies = false;

//[request setHTTPMethod:@"POST"];


NSString *boundary = @"----------SwIfTeRhTtPrEqUeStBoUnDaRy";

NSString *contentType = [NSString stringWithFormat:@"multipart/form-data; boundary=%@", boundary];

[request setValue:contentType forHTTPHeaderField:@"Content-Type"];
//[request addValue:contentType forHTTPHeaderField:@"Content-Type"];



NSMutableData *body = [NSMutableData data];
NSMutableData *tempData = [NSMutableData data];

[tempData appendData:[[NSString stringWithFormat:@"--%@\r\n", boundary] dataUsingEncoding:NSUTF8StringEncoding]];

[tempData appendData:[@"Content-Disposition: form-data; name=\"userfile\"; filename=\"iphoneimage.xml\"\r\n" dataUsingEncoding:NSUTF8StringEncoding]];

[tempData appendData:[@"Content-Type: application/octet-stream\r\n\r\n" dataUsingEncoding:NSUTF8StringEncoding]];

//[tempData appendData:[NSData dataWithData:imageData]];  ///IMAGEN
[tempData appendData:[NSData dataWithData:cData]];

[tempData appendData:[@"\r\n" dataUsingEncoding:NSUTF8StringEncoding]];

[body appendData: tempData];


[body appendData:[[NSString stringWithFormat:@"\r\n--%@--\r\n", boundary] dataUsingEncoding:NSUTF8StringEncoding]];



[request setValue: [NSString stringWithFormat:@"%d", body.length ] forHTTPHeaderField:@"Content-Length"];


request.HTTPBody =body;





NSData *returnData = [NSURLConnection sendSynchronousRequest:request returningResponse:nil error:nil];

NSString *returnString = [[NSString alloc] initWithData:returnData encoding:NSUTF8StringEncoding];

NSLog(@"finalizacion %@", returnString);

Upvotes: 0

HDdeveloper
HDdeveloper

Reputation: 4404

I had the same problem. I used ASIHTTPRequest, for uploading files, it works fine.

Uploading:

Imagefile:

ASIFormDataRequest *request = [ASIFormDataRequest requestWithURL:url];
[request addPostValue:@"Ben" forKey:@"names"];
[request addPostValue:@"George" forKey:@"names"];
[request addFile:@"/Users/ben/Desktop/ben.jpg" forKey:@"photos"];
[request addData:imageData withFileName:@"george.jpg" andContentType:@"image/jpeg" forKey:@"photos"];

With Other data simultaneously:

ASIFormDataRequest *request = [ASIFormDataRequest requestWithURL:url];

// Upload a file on disk
[request setFile:@"/Users/ben/Desktop/ben.jpg" withFileName:@"myphoto.jpg" andContentType:@"image/jpeg"
forKey:@"photo"];

// Upload an NSData instance
[request setData:imageData withFileName:@"myphoto.jpg" andContentType:@"image/jpeg" forKey:@"photo"];

for Downloading to desired Path:

ASIHTTPRequest *request = [ASIHTTPRequest requestWithURL:url];
[request setDownloadDestinationPath:@"/Users/ben/Desktop/my_file.txt"];

Upvotes: 1

Narasimhaiah Kolli
Narasimhaiah Kolli

Reputation: 66

If you want to send image to server,send by data in encoded form,server can handle encoded form of image and they will get image data in encoded from.

Upvotes: 0

Related Questions