2015-02-26 8 views
5

मैं एकल सेवा अनुरोध में एक से अधिक छवि अपलोड करना चाहता हूं। मैं उसे कैसे कर सकता हूँ। अब तक मैं की तरह के रूप मेंएक अनुरोध में एकाधिक छवियां अपलोड करें

NSData *imageData = UIImageJPEGRepresentation(image, 90); 


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


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

NSMutableData *postBody = [NSMutableData data]; 

// file 
[postBody appendData:[[NSString stringWithFormat:@"\r\n--%@\r\n",boundary] dataUsingEncoding:NSUTF8StringEncoding]]; 
[postBody appendData:[[NSString stringWithString:[NSString stringWithFormat:@"Content-Disposition: form-data; name=\"files\"; filename=\”%@\”\r\n”,@“imagename”]] dataUsingEncoding:NSUTF8StringEncoding]]; 
[postBody appendData:[@"Content-Type: application/octet-stream\r\n\r\n" dataUsingEncoding:NSUTF8StringEncoding]]; 
[postBody appendData:[NSData dataWithData:imageData]]; 
[postBody appendData:[[NSString stringWithFormat:@"\r\n--%@--\r\n",boundary] dataUsingEncoding:NSUTF8StringEncoding]]; 


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

अब मैं सर्वर से दो छवियों को अपलोड करने मैं यह कैसे कर सकते हैं एक छवि अपलोड करने में सक्षम हूँ।

उत्तर

1

अपलोड करने के लिए आपका उत्तर यहाँ है। यह परीक्षण किया गया है और मैं अन्य पैरामीटर के साथ कई छवियों को अपलोड करने के लिए नीचे दिए गए तरीकों का उपयोग कर रहा हूं।

- (void)uploadMultipleImageInSingleRequest 
{ 

    NSString *returnString; 
    NSDictionary *aParametersDic; // It's contains other parameters. 
    NSDictionary *aImageDic; // It's contains multiple image data as value and a image name as key 
    NSString *urlString; // an url where the request to be posted 
    NSURL *url = [NSURL URLWithString:urlString]; 
    NSMutableURLRequest *request= [[NSMutableURLRequest alloc] initWithURL:url] ; 

    [request setURL:[NSURL URLWithString:urlString]]; 
    [request setHTTPMethod:@"POST"]; 
    NSString *boundary = @"---------------------------14737809831466499882746641449"; 
    NSString *contentType = [NSString stringWithFormat:@"multipart/form-data; boundary=%@",boundary]; 
    [request addValue:contentType forHTTPHeaderField: @"Content-Type"]; 

    NSMutableData *postbody = [NSMutableData data]; 
    NSString *postData = [self getHTTPBodyParamsFromDictionary:aParametersDic boundary:boundary]; 
    [postbody appendData:[postData dataUsingEncoding:NSUTF8StringEncoding]]; 

    [aImageDic enumerateKeysAndObjectsUsingBlock:^(id key, id obj, BOOL *stop) { 
     if(obj != nil) 
     { 
      [postbody appendData:[[NSString stringWithFormat:@"\r\n--%@\r\n",boundary] dataUsingEncoding:NSUTF8StringEncoding]]; 
      [postbody appendData:[[NSString stringWithFormat:@"Content-Disposition: form-data; name=\"PostedImage\"; filetype=\"image/png\"; filename=\"%@\"\r\n", key] dataUsingEncoding:NSUTF8StringEncoding]]; 
      [postbody appendData:[@"Content-Type: image/jpeg\r\n\r\n" dataUsingEncoding:NSUTF8StringEncoding]]; 
      [postbody appendData:[NSData dataWithData:obj]]; 
     } 
    }]; 

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

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

-(NSString *) getHTTPBodyParamsFromDictionary: (NSDictionary *)params boundary:(NSString *)boundary 
{ 
    NSMutableString *tempVal = [[NSMutableString alloc] init]; 
    for(NSString * key in params) 
    { 
     [tempVal appendFormat:@"\r\n--%@\r\n", boundary]; 
     [tempVal appendFormat:@"Content-Disposition: form-data; name=\"%@\"\r\n\r\n%@",key,[params objectForKey:key]]; 
    } 
    return [tempVal description]; 
} 
+0

प्रतिक्रिया के लिए धन्यवाद .. अभी भी यह मेरे लिए काम कर रहा है। मेरे पैरामीटर सही ढंग से डाले जा रहे हैं लेकिन फाइलें अपलोड नहीं हो रही हैं .. क्या यह सही है? aImageDic = @ { @ "image1": imageData1, @ "image2": imageData2 }; –

+0

धन्यवाद यह अब काम कर रहा है। मैं गलत फ़ाइल नाम भेज रहा था। Thats क्यों यह काम नहीं कर रहा था .. –

+0

यह अपने स्वयं के बग को खोजने और हल करने के लिए एक डेवलपर का एक बहुत अच्छा संकेत है ... अच्छा काम ब्रो .. इसे जारी रखें ... :) –

1

एक विकल्प उपयोग AFNetworking कई छवियों

//create image data 
UIImage *image = ...... 
NSData *imageData = UIImageJPEGRepresentation(image, 0.5); 

UIImage *image2 = ...... 
NSData *imageData2 = UIImageJPEGRepresentation(image2, 0.5); 

//Now add to array and also create array of images data 
NSArray *arrImagesData = [NSArray arrayWithObjects:imageData,imageData2,nil]; 

//Create manager 
AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager]; 
//parameters if any 
NSDictionary *parameters = ....... 
//Now post 
[manager POST:@"your url here" parameters:parameters constructingBodyWithBlock:^(id<AFMultipartFormData> formData) { 
    //add img data one by one 
    for(int i=0; i<[arrImagesData count];i++) 
    { 
     NSData *imageData = arrImagesData[i]; 
     NSString *strName = [NSString stringWithFormat:@"name%d",i] 
     [formData appendPartWithFormData:imageData name:strName]; 
    } 


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

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

प्रतिक्रिया के लिए धन्यवाद। लेकिन मैं छवि अपलोड के लिए AFNetworking का उपयोग नहीं कर रहा हूं। क्या हम नियमित रूप से ऐसा कर सकते हैं? मेरा मतलब है कि सरल पोस्ट बॉडी का उपयोग करना जैसा कि मैंने ऊपर बताया है –

+0

उपयोगकर्ता फ़ाइल फ़ाइल, फ़ाइल आकार, फ़ाइल जैसे पैरामीटर जोड़ सकता है, फ़ाइल फ़ाइल एकाधिक फ़ाइल अपलोड में प्रत्येक फ़ाइल के लिए कैसे करें? – Raxit

0
#define kStartTag @"--%@\r\n" 
#define kEndTag  @"\r\n" 
#define kContent @"Content-Disposition: form-data; name=\"%@\"\r\n\r\n" 
#define kBoundary @"---------------------------14737809831466499882746641449" 

-(void)uploadImageonServers 
    { 
     NSMutableURLRequest *request = nil; 
     NSLog(@"image upload"); 

     NSMutableData *body = [NSMutableData data]; 
     request = [[NSMutableURLRequest alloc] init]; 
     NSString *requestURL = [NSString stringWithFormat:@"http://192.168.1.101/gmento/index.php/api/professional/addServices"]; 

     [request setURL:[NSURL URLWithString:requestURL]]; 
     [request setHTTPMethod:@"POST"]; 
     NSString *contentType = [NSString stringWithFormat:@"multipart/form-data; boundary=%@",kBoundary]; 
     [request addValue:contentType forHTTPHeaderField: @"Content-Type"]; 


     // user ID parameter 
     [body appendData:[[NSString stringWithFormat:kStartTag, kBoundary] dataUsingEncoding:NSUTF8StringEncoding]]; 
     [body appendData:[[NSString stringWithFormat:kContent, @"professional_id"] dataUsingEncoding:NSUTF8StringEncoding]]; 
     [body appendData:[@"1232" dataUsingEncoding:NSUTF8StringEncoding]]; 
     [body appendData:[[NSString stringWithFormat:kEndTag] dataUsingEncoding:NSUTF8StringEncoding]]; 


     // Grop ID parameter 
     [body appendData:[[NSString stringWithFormat:kStartTag, kBoundary] dataUsingEncoding:NSUTF8StringEncoding]]; 
     [body appendData:[[NSString stringWithFormat:kContent, @"title"] dataUsingEncoding:NSUTF8StringEncoding]]; 
     [body appendData:[@"test" dataUsingEncoding:NSUTF8StringEncoding]]; 
     [body appendData:[[NSString stringWithFormat:kEndTag] dataUsingEncoding:NSUTF8StringEncoding]]; 


     // prepration_type_id parameter 
     [body appendData:[[NSString stringWithFormat:kStartTag, kBoundary] dataUsingEncoding:NSUTF8StringEncoding]]; 
     [body appendData:[[NSString stringWithFormat:kContent, @"price"] dataUsingEncoding:NSUTF8StringEncoding]]; 
     [body appendData:[@"test" dataUsingEncoding:NSUTF8StringEncoding]]; 
     [body appendData:[[NSString stringWithFormat:kEndTag] dataUsingEncoding:NSUTF8StringEncoding]]; 

     // description parameter 
     [body appendData:[[NSString stringWithFormat:kStartTag, kBoundary] dataUsingEncoding:NSUTF8StringEncoding]]; 
     [body appendData:[[NSString stringWithFormat:kContent, @"description"] dataUsingEncoding:NSUTF8StringEncoding]]; 
     [body appendData:[@"test" dataUsingEncoding:NSUTF8StringEncoding]]; 

     [body appendData:[[NSString stringWithFormat:kEndTag] dataUsingEncoding:NSUTF8StringEncoding]]; 




     NSMutableArray *arr_images=[[NSMutableArray alloc] init]; 
     [arr_images addObject:[UIImage imageNamed:@"1.jpg"]]; 
     [arr_images addObject:[UIImage imageNamed:@"1.jpg"]]; 
     for (int i=0; i<arr_images.count;i++) 
     { 
      NSData *image_videoData;//isImageSet?imgMyProfPict.image:@"" 
      image_videoData = UIImageJPEGRepresentation([arr_images objectAtIndex:i], 1.0); 
      if (image_videoData) 
      { 
       // image File 
       [body appendData:[[NSString stringWithFormat:kStartTag, kBoundary] dataUsingEncoding:NSUTF8StringEncoding]]; 
       [body appendData:[[NSString stringWithFormat:@"Content-Disposition: form-data; name=%@; filename=imageName.jpeg\r\n", @"services_image[]"] dataUsingEncoding:NSUTF8StringEncoding]]; 
       [body appendData:[@"Content-Type: image/jpeg\r\n\r\n" dataUsingEncoding:NSUTF8StringEncoding]]; 
       [body appendData:image_videoData]; 
       [body appendData:[[NSString stringWithFormat:kEndTag] dataUsingEncoding:NSUTF8StringEncoding]]; 
      } 
      else 
      { 
       [body appendData:[[NSString stringWithFormat:kStartTag, kBoundary] dataUsingEncoding:NSUTF8StringEncoding]]; 
      } 

     } 


     for (int i=0; i<arr_images.count;i++) 
     { 
      NSData *image_videoData;//isImageSet?imgMyProfPict.image:@"" 
      image_videoData = UIImageJPEGRepresentation([arr_images objectAtIndex:i], 1.0); 
      if (image_videoData) 
      { 
       // image File 
       [body appendData:[[NSString stringWithFormat:kStartTag, kBoundary] dataUsingEncoding:NSUTF8StringEncoding]]; 
       [body appendData:[[NSString stringWithFormat:@"Content-Disposition: form-data; name=%@; filename=imageName.jpeg\r\n", @"glimpses_image[]"] dataUsingEncoding:NSUTF8StringEncoding]]; 
       [body appendData:[@"Content-Type: image/jpeg\r\n\r\n" dataUsingEncoding:NSUTF8StringEncoding]]; 
       [body appendData:image_videoData]; 
       [body appendData:[[NSString stringWithFormat:kEndTag] dataUsingEncoding:NSUTF8StringEncoding]]; 
      } 
      else 
      { 
       [body appendData:[[NSString stringWithFormat:kStartTag, kBoundary] dataUsingEncoding:NSUTF8StringEncoding]]; 
      } 

     } 


     // close form 
     [body appendData:[[NSString stringWithFormat:@"--%@--\r\n", kBoundary] dataUsingEncoding:NSUTF8StringEncoding]]; 


     NSString *postLength = [NSString stringWithFormat:@"%lu", (unsigned long)[body length]]; 
     [request setValue:postLength forHTTPHeaderField:@"Content-Length"]; 
     [request setHTTPBody:body]; 

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

     NSError *error; 
     id receivedData = [NSJSONSerialization JSONObjectWithData:returnData options:NSJSONReadingMutableContainers error:&error]; 

     NSDictionary *dicResponse = (NSDictionary *)receivedData; 
     if ([[dicResponse valueForKeyPath:@"status"] intValue] == 1) 
     { 
     } 
     else 
     { 
     } 

    } 
+0

कृपया अपने कोड की व्याख्या करें ताकि यह दूसरों के लिए आसान हो समझने के लिए। –

1
NSMutableURLRequest *request = [[NSMutableURLRequest alloc] init]; 
[request setHTTPShouldHandleCookies:NO]; 
[request setTimeoutInterval:60]; 
[request setHTTPMethod:@"POST"]; 
NSString *boundary = @"------VohpleBoundary4QuqLuM1cE5lMwCy"; 
NSString *contentType = [NSString stringWithFormat:@"multipart/form-data; boundary=%@", boundary]; 
[request setValue:contentType forHTTPHeaderField: @"Content-Type"]; 

NSMutableData *body = [NSMutableData data]; 
NSMutableDictionary *parameters = [[NSMutableDictionary alloc] init]; 
[parameters setValue:@"IOS Testing" forKey:@"subject"]; 
[parameters setValue:@"Message" forKey:@"message"]; 
    for (NSString *param in parameters) { 
    [body appendData:[[NSString stringWithFormat:@"--%@\r\n", boundary] dataUsingEncoding:NSUTF8StringEncoding]]; 
    [body appendData:[[NSString stringWithFormat:@"Content-Disposition: form-data; name=\"%@\"\r\n\r\n", param] dataUsingEncoding:NSUTF8StringEncoding]]; 
    [body appendData:[[NSString stringWithFormat:@"%@\r\n", [parameters objectForKey:param]] dataUsingEncoding:NSUTF8StringEncoding]]; 
} 


NSMutableArray *multipleArray=[[NSMutableArray alloc] init]; 
[multipleArray addObject:[UIImage imageNamed:@"images.jpeg"]]; 
[multipleArray addObject:[UIImage imageNamed:@"pic3.png"]]; 
for (int i=0; i<multipleArray.count;i++) 
{ 
    NSData *imageData; 
    imageData = UIImageJPEGRepresentation([multipleArray objectAtIndex:i], 1.0); 
    if (imageData) 
    { 
     [body appendData:[[NSString stringWithFormat:@"--%@\r\n", boundary] dataUsingEncoding:NSUTF8StringEncoding]]; 
     [body appendData:[[NSString stringWithFormat:@"Content-Disposition: form-data; name=\"%@\"; filename=\"image.jpg\"\r\n", @"uploaded_file[]"] dataUsingEncoding:NSUTF8StringEncoding]]; 
     [body appendData:[@"Content-Type:image/jpeg\r\n\r\n" dataUsingEncoding:NSUTF8StringEncoding]]; 
     [body appendData:[NSData dataWithData:imageData]]; 
     [body appendData:[[NSString stringWithFormat:@"\r\n"] dataUsingEncoding:NSUTF8StringEncoding]]; 
    } 
    else 
    { 
     [body appendData:[[NSString stringWithFormat:@"\r\n"] dataUsingEncoding:NSUTF8StringEncoding]]; 
    } 

} 

[body appendData:[[NSString stringWithFormat:@"--%@--\r\n", boundary] dataUsingEncoding:NSUTF8StringEncoding]]; 
[request setHTTPBody:body]; 
[request setURL:[NSURL URLWithString:BASEURL]]; 
[NSURLConnection sendAsynchronousRequest:request 
            queue:[NSOperationQueue mainQueue] 
         completionHandler:^(NSURLResponse *response, NSData *data, NSError *error) { 
          NSHTTPURLResponse* httpResponse = (NSHTTPURLResponse*)response; 
          if ([httpResponse statusCode] == 200) { 
           NSLog(@"success"); 
          } 

}]; 

}

संबंधित मुद्दे