2017-02-10 1 views
-1

Ich versuche, eine Post-Anfrage zu senden.
Hier ist mein Versuch:Laden Sie ein Bild (MultipartFormData) Anfrage objctiveC

-(void)Test{ 

NSDictionary * orderMasterDict = @{@"distributorId":@10000, 
            @"fieldUsersId": @3, 
            @"itemId":@0,@"orderMatserId":@56358             }; 

Globals.OrderDetailsArray = [NSMutableArray arrayWithObjects:orderDetailsDictAnatomy,orderDetailsDictTexture,orderDetailsDictTranslucency, nil]; 

NSData *postData = [NSJSONSerialization dataWithJSONObject:Globals.OrderDetailsArray options:NSJSONWritingPrettyPrinted error:nil]; 
NSData *postData2 = [NSJSONSerialization dataWithJSONObject:orderMasterDict options:NSJSONWritingPrettyPrinted error:nil]; 

NSString *jsonString2 = [[NSString alloc] initWithData:postData2 encoding:NSUTF8StringEncoding]; 
NSString *jsonString = [[NSString alloc] initWithData:postData encoding:NSUTF8StringEncoding]; 

NSMutableDictionary* _params = [[NSMutableDictionary alloc] init]; 
[_params setObject:jsonString2 forKey:@"orderMaster"]; 
[_params setObject:jsonString forKey:@"orderDetails"]; 
[_params setObject:[NSString stringWithFormat:@"3"] forKey:@"userId"]; 
[_params setObject:[NSString stringWithFormat:@"ALRAISLABS"] forKey:@"subsCode"]; 

// the boundary string : a random string, that will not repeat in post data, to separate post data fields. 
NSString *BoundaryConstant = @"----------V2ymHFg03ehbqgZCaKO6jy"; 

// string constant for the post parameter 'file'. My server uses this name: `file`. Your's may differ 
NSString* FileParamConstant = @"imageUpload"; 

// the server url to which the image (or the media) is uploaded. Use your server url here 
NSURL* requestURL = [NSURL URLWithString:@"http://192.168.0.102:8080/Demo/Test/create"]; 

// create request 
NSMutableURLRequest *request = [[NSMutableURLRequest alloc] init]; 
[request setCachePolicy:NSURLRequestReloadIgnoringLocalCacheData]; 
[request setHTTPShouldHandleCookies:NO]; 
[request setTimeoutInterval:30]; 
[request setHTTPMethod:@"POST"]; 

// set Content-Type in HTTP header 
NSString *contentType = [NSString stringWithFormat:@"multipart/form-data; boundary=%@", BoundaryConstant]; 
[request setValue:contentType forHTTPHeaderField: @"Content-Type"]; 

// post body 
NSMutableData *body = [NSMutableData data]; 

// add params (all params are strings) 
for (NSString *param in _params) { 
    [body appendData:[[NSString stringWithFormat:@"--%@\r\n", BoundaryConstant] dataUsingEncoding:NSUTF8StringEncoding]]; 
    [body appendData:[[NSString stringWithFormat:@"Content-Disposition: form-data; name=\"%@\"\r\n\r\n", param] dataUsingEncoding:NSUTF8StringEncoding]]; 
    [body appendData:[[NSString stringWithFormat:@"%@\r\n", [_params objectForKey:param]] dataUsingEncoding:NSUTF8StringEncoding]]; 
} 

// add image data 
NSData *imageData = UIImageJPEGRepresentation(_uploadImageView.image, 0.6); 
if (imageData) { 
    [body appendData:[[NSString stringWithFormat:@"--%@\r\n", BoundaryConstant] dataUsingEncoding:NSUTF8StringEncoding]]; 
    [body appendData:[[NSString stringWithFormat:@"Content-Disposition: form-data; name=\"%@\"; filename=\"image.jpg\"\r\n", FileParamConstant] dataUsingEncoding:NSUTF8StringEncoding]]; 
    [body appendData:[@"Content-Type: image/jpeg\r\n\r\n" dataUsingEncoding:NSUTF8StringEncoding]]; 
    [body appendData:imageData]; 
    [body appendData:[[NSString stringWithFormat:@"\r\n"] dataUsingEncoding:NSUTF8StringEncoding]]; 
} 

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

// setting the body of the post to the reqeust 
[request setHTTPBody:body]; 

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

// set URL 
[request setURL:requestURL]; 


NSURLSession *session = [NSURLSession sessionWithConfiguration:[NSURLSessionConfiguration defaultSessionConfiguration]]; 

[[session dataTaskWithRequest:request completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) { 

    if (error){ 
     NSLog(@"ERROR :",error); 
    }else{ 
     NSDictionary *result = [NSJSONSerialization JSONObjectWithData:data options:NSJSONReadingAllowFragments error:&error]; 

     NSHTTPURLResponse *httpResponse = (NSHTTPURLResponse *) response; 
     NSLog(@"response status code: %ld", (long)[httpResponse statusCode]); 
     if ([httpResponse statusCode] == 200) { 
      NSLog(@"StatusCode : %ld",(long)[httpResponse statusCode]); 
     }else{ 
      NSLog(@"Error"); 
     } 
    } 
}] resume];} 

Wie ein multipartFormData Antrag stellen? Ich habe versucht zu googeln, konnte keine passende Antwort für diese Situation finden und dachte gut. Bitte helfen Sie mir, die richtige Lösung zu finden. Vielen Dank im Voraus.

Antwort

0

Durch die Verwendung von Alamofire

-(void)CreateOrder{ 
NSString * urlString = [NSString stringWithFormat:@"YOUR URL" 

NSDictionary * orderMasterDict = @{@"distributorId":stakeholderID, 
            @"fieldUsersId": userID, 
            @"itemId":@0,@"orderMatserId":@0             }; 

Globals.OrderDetailsArray = [NSMutableArray arrayWithObjects:orderDetailsDictAnatomy,orderDetailsDictTexture,orderDetailsDictTranslucency, nil]; 

NSDictionary * consumerDetails = @{@"consumerName":Globals.PatientName,@"consumerReferenceId":Globals.PatientID,@"notes":Globals.PatientNotes,@"cunsumerContacNumber":@"456464654654"}; 


NSData *postData = [NSJSONSerialization dataWithJSONObject:Globals.OrderDetailsArray options:NSJSONWritingPrettyPrinted error:nil]; 
NSData *postData2 = [NSJSONSerialization dataWithJSONObject:orderMasterDict options:NSJSONWritingPrettyPrinted error:nil]; 

NSString *jsonString2 = [[NSString alloc] initWithData:postData2 encoding:NSUTF8StringEncoding]; 
NSString *jsonString = [[NSString alloc] initWithData:postData encoding:NSUTF8StringEncoding]; 

//retrieving userId from UserDefaults 
prefs = [NSUserDefaults standardUserDefaults]; 
NSString * userIdString = [prefs stringForKey:@"userID"]; 

NSDictionary *parameters = @{@"orderMaster": jsonString2, @"orderDetails" : jsonString ,@"userId" : userIdString,@"subsCode" : @"ABC_MDENT"}; 


NSMutableURLRequest *request = [[AFHTTPRequestSerializer serializer] multipartFormRequestWithMethod:@"POST" URLString:urlString parameters:parameters constructingBodyWithBlock:^(id<AFMultipartFormData> formData) { 

    //For adding Multiple images From selected Images array 
    int i = 0; 
    for(UIImage *eachImage in selectedImages) 
    { 

     UIImage *image = [self scaleImage:eachImage toSize:CGSizeMake(480.0,480.0)]; 

     NSData *imageData = UIImageJPEGRepresentation(image,0.3); 
     [formData appendPartWithFileData:imageData name:@"imageUpload" fileName:[NSString stringWithFormat:@"file%d.jpg",i ] mimeType:@"image/jpeg"]; 
      i++; 
    } 
} error:nil]; 

AFURLSessionManager *manager = [[AFURLSessionManager alloc] initWithSessionConfiguration:[NSURLSessionConfiguration defaultSessionConfiguration]]; 

NSURLSessionUploadTask *uploadTask; 
uploadTask = [manager 
       uploadTaskWithStreamedRequest:request 
       progress:^(NSProgress * _Nonnull uploadProgress) { 
        dispatch_async(dispatch_get_main_queue(), ^{ 
        }); 
       } 
       completionHandler:^(NSURLResponse * _Nonnull response, id _Nullable responseObject, NSError * _Nullable error) { 

        NSLog(@"responseObject : %@",responseObject); 

        if (error) { 
        NSlog(@"error") 
        } else { 
         NSHTTPURLResponse *httpResponse = (NSHTTPURLResponse *)response; 

         if ([httpResponse statusCode] == 200) { 
          resposeStatusCode = [responseObject objectForKey:@"statusCode"]; 
         }else{ 
          NSLog(@"requestError"); 
         } 
        } 
       }]; 
[uploadTask resume]; } 
1

Zuerst ändern Sie Ihr Bild in NSData dann Hilfe von AFNetworking können Sie Ihr Bild posten.

NSData *data = UIImagePNGRepresentation(yourImage); 
imageData = [data base64EncodedStringWithOptions: NSDataBase64Encoding64CharacterLineLength]; 

Dann diesen Code verwenden:

NSMutableDictionary *finaldictionary = [[NSMutableDictionary alloc] init]; 
[finaldictionary setObject:imageData forKey:@"image"]; 

AFHTTPSessionManager *manager = [AFHTTPSessionManager manager]; 
manager.responseSerializer = [AFHTTPResponseSerializer serializer]; 
[manager POST: [NSString stringWithFormat: @"%@%@", IQAPIClientBaseURL, kIQAPIImageUpload] parameters: finaldictionary constructingBodyWithBlock: ^(id<AFMultipartFormData> formData) { } 
    progress:nil success:^(NSURLSessionDataTask * _Nonnull task, id _Nullable responseObject) { 
     NSLog(@"Success response=%@", responseObject); 
     NSDictionary *responseDict = [NSJSONSerialization JSONObjectWithData: responseObject options: NSJSONReadingAllowFragments error: nil]; 
     NSLog(@"%@", responseDict); 
    } 
    failure: ^(NSURLSessionDataTask * _Nullable task, NSError * _Nonnull error) { 
     NSLog(@"Errorrrrrrr=%@", error.localizedDescription); 
    } 
]; 
+0

Vielen Dank für Ihre Antwort. Bitte werfen Sie einen Blick auf die aktualisierte Frage. Das ist, was ich versuche zu tun. Bitte helfen Sie mir, das richtige Ergebnis zu erhalten. Vielen Dank im Voraus .. – Shibili

Verwandte Themen