2017-02-10 93 views
-1

我正在嘗試發送帖子請求。
這裏是我的嘗試:上傳圖片(MultipartFormData)請求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];} 

如何使multipartFormData要求? 我試着用Google搜索,找不到適合這種情況的任何答案,並且好好思考。請幫助我找到合適的解決方案。 在此先感謝。

回答

0

通過使用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

首先你改變你的形象在NSData然後幫助AFNetworking你可以發佈你的圖像。

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

然後使用此代碼:

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

感謝您的答覆。請看看最新的問題。這是我想要做的。請幫助我得到正確的結果。提前感謝.. – Shibili

相關問題