2

i am trying to upload a image to server from iPhone application

PHP code for upload image is following

if(isset($_POST['insertImage']))
{                   //INSERT IMAGE -------------------
     $method=safeData($_POST['insertImage']);
    if($method=='true')
    {
        if(isset($_POST['userId']))
        {

            if(isset($_FILES['imageFile']))
            {

            if($_FILES['imageFile']['type']=="image/gif" || $_FILES['imageFile']['type']=="image/bmp" || $_FILES['imageFile']['type']=='image/jpeg' || $_FILES['imageFile']['type']=='image/jpg' || $_FILES['imageFile']['type']=='image/png')
            {
                if($_FILES['imageFile']['size']<=5250000)
                {
                                                                                $userId=safeData($_POST['userId']);
                    $newImgName=rand()."a".time().".".findexts($_FILES["imageFile"]["name"]);                       imgPath="./../admin/images/";
                    move_uploaded_file($_FILES['imageFile']['tmp_name'],$imgPath.$newImgName);
                    $data.=saveImageInfo($userId,$newImgName);  
                }
                    else
                {
                  $data.="<List><ResponseCode>405</ResponseCode><Message>Maximum image size should not be more than 5mb </List>";   
                }
            }
            else
            {
                $data.="<List><ResponseCode>405</ResponseCode><Message>Invalid image format. only png,jpg,bmp formats supported</Message></List>";                                                      }
            }
            else
            {
                $data.="<List><ResponseCode>405</ResponseCode><Message>imageFile method not found</Message></List>";             
            }
                                                                    }
        else
        {
            $data.="<List><ResponseCode>405</ResponseCode><Message>userId method not found</Message></List>";   
        }
    }
    else
    {
        $data.="<List><ResponseCode>405</ResponseCode><Message>invalid insertImage argument</Message></List>";              
    }
}

and I used following code to upload image to server

+(NSData *)setUserImage:(NSData *)userImageData UserId:(int)UserId
{
    NSString *result;
    NSData *responseData;
    @try {
        NSURL *url = [[NSURL alloc] initWithString:webAddress]; 
        NSMutableURLRequest *req = [[NSMutableURLRequest alloc] initWithURL:url];
        [req setHTTPMethod:@"POST"];

        [req setValue:@"multipart/form-data; boundary=*****" forHTTPHeaderField:@"Content-Type"];//

        NSMutableData *postBody = [NSMutableData data];
        NSString *stringBoundary = [NSString stringWithString:@"*****"];

        [postBody appendData:[[NSString stringWithFormat:@"--%@\r\n",stringBoundary] dataUsingEncoding:NSASCIIStringEncoding]];
        [postBody appendData:[[NSString stringWithString:@"Content-Disposition: form-data; name=\"insertImage\"\r\n\r\n"] dataUsingEncoding:NSASCIIStringEncoding]];
        [postBody appendData:[[NSString stringWithFormat:@"true"] dataUsingEncoding:NSASCIIStringEncoding]];
        [postBody appendData:[[NSString stringWithFormat:@"\r\n--%@--\r\n",stringBoundary] dataUsingEncoding:NSASCIIStringEncoding]];


        [postBody appendData:[[NSString stringWithFormat:@"--%@\r\n",stringBoundary] dataUsingEncoding:NSASCIIStringEncoding]];
        [postBody appendData:[[NSString stringWithString:@"Content-Disposition: form-data; name=\"userId\"\r\n\r\n"] dataUsingEncoding:NSASCIIStringEncoding]];
        [postBody appendData:[[NSString stringWithFormat:@"%d",UserId] dataUsingEncoding:NSASCIIStringEncoding]];
        [postBody appendData:[[NSString stringWithFormat:@"\r\n--%@--\r\n",stringBoundary] dataUsingEncoding:NSASCIIStringEncoding]];

        [postBody appendData:[[NSString stringWithFormat:@"--%@\r\n",stringBoundary] dataUsingEncoding:NSASCIIStringEncoding]];
        [postBody appendData:[[NSString stringWithString:@"Content-Disposition: form-data; name=\"imageFile\"; filename=\"myimagefile.png\"\r\n\r\n"] dataUsingEncoding:NSASCIIStringEncoding]];

        //[postBody appendData:[[NSString stringWithString:@"Content-Disposition: form-data; name=\"imageFile\"; filename=\"myimagefile.png\"\r\n\r\n"] dataUsingEncoding:NSASCIIStringEncoding]];
        [postBody appendData:[NSData dataWithData:userImageData]];// dataUsingEncoding:NSASCIIStringEncoding]];
        [postBody appendData:[[NSString stringWithFormat:@"\r\n--%@--\r\n",stringBoundary] dataUsingEncoding:NSASCIIStringEncoding]];

        [req setHTTPBody: postBody];//putParams];   

        NSHTTPURLResponse* response = nil;  
        NSError* error = [[[NSError alloc] init] autorelease];  

        responseData = [NSURLConnection sendSynchronousRequest:req returningResponse:&response error:&error];  
        result = [[NSString alloc] initWithData:responseData encoding:NSUTF8StringEncoding];
        if(isInDebugMode)
            NSLog(@"Result: %@", result);

        [url release];
        [req release];

        IceCreamManFinderAppDelegate *delegate1=(IceCreamManFinderAppDelegate *)[UIApplication sharedApplication].delegate;
        if(error.domain!=nil)
        {
            NSString *errorDesc=[[error userInfo] objectForKey:@"NSLocalizedDescription"];
            delegate1.globalErrorMessage=errorDesc;
            return nil;
        }
        else
        {
            delegate1.globalErrorMessage=nil;
        }
    }
    @catch (NSException* ex) {
        NSLog(@"Error: %@",ex);
    }
    return responseData;
}

from above code i get following response from server

Invalid image format. only png,jpg,bmp formats

i tried lot but not success.

Please suggest where i am wrong?

user547503
  • 51
  • 2
  • 4

1 Answers1

3

You wrote the server code to only accept data with certain specified content types, but then you never added the content type to your data. Simply emit the correct content type for your image data:

// Emit the content type here as well
[postBody appendData:[[NSString stringWithFormat:@"--%@\r\n",stringBoundary] dataUsingEncoding:NSASCIIStringEncoding]];
[postBody appendData:[[NSString stringWithString:@"Content-Disposition: form-data; name=\"imageFile\"; filename=\"myimagefile.png\"\r\nContent-Type: image/png\r\n\r\n"] dataUsingEncoding:NSASCIIStringEncoding]];

[postBody appendData:[NSData dataWithData:userImageData]];
[postBody appendData:[[NSString stringWithFormat:@"\r\n--%@--\r\n",stringBoundary] dataUsingEncoding:NSASCIIStringEncoding]];

The error is actually coming back from your own server response, so simply following the flow of control on your server code gives you the cause.

Jason Coco
  • 77,985
  • 20
  • 184
  • 180
  • HI Jason , I know this thing that error is coming back from server. main thing is images upload not worked since i was doing some silly mistake. Thanks a lot . Now it works – user547503 Dec 19 '10 at 11:31
  • Hi Jason, i am having same problem as in question.I am not getting what you want to say by your code..please post same code by changing..thanks – dks1725 Feb 04 '11 at 09:43