2017-01-24 7 views
0

は...例 -はNSUrlSession IOSを通じてbase64文字列を送信するためにどのように

NSString *encodedString = [[self encodeToBase64String:imgParcel]stringByReplacingOccurrencesOfString:@"+" withString:@"%2B"]; 

[self.package.arrParcelImages addObject:encodedString] 

ためNSURLSessionsDataTaskを使用してsererし、このようにそれを送信するために

NSDictionary *postParameters = @{@"userID":@"1",@"images":self.package.arrParcelImages} 

NSData *postData = [NSJSONSerialization dataWithJSONObject:postParameters options:NSJSONWritingPrettyPrinted error:&error]; 

NSString *dataString = = [[NSString alloc] initWithData:postData encoding:NSUTF8StringEncoding]; 

NSURLSessionConfiguration *sessionConfiguration = [NSURLSessionConfiguration defaultSessionConfiguration]; 

NSURLSession *session = [NSURLSession sessionWithConfiguration:sessionConfiguration delegate:self delegateQueue:nil]; 


NSURL *url = [NSURL URLWithString:urlString]; 

NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url]; 

[request addValue:@"application/json" forHTTPHeaderField:@"Content-Type"]; 
[request addValue:@"image/png" forHTTPHeaderField:@"Content-Type"]; 

NSString *strValue = [NSString stringWithFormat:@"%@",[USER_DEFAULTS objectForKey:UD_X_API_VALUE]]; 
    if (strValue != nil) { 
     [request addValue:strValue forHTTPHeaderField:[USER_DEFAULTS objectForKey:UD_X_API_KEY]]; 
    } 

[request setHTTPMethod:@"POST"]; 
[request setHTTPBody:postData]; 

NSURLSessionDataTask *postDataTask = [session dataTaskWithRequest:request completionHandler:^(NSData *taskData, NSURLResponse *taskResponse, NSError *taskError) { 
    //NSLog(@"Start - Response:%@ %@\n", taskResponse, taskError); 

    dispatch_async(dispatch_get_main_queue(), ^{ 
     if (taskError) { 
      NSLog(@" Error = %@",[taskError localizedDescription]); 
      completionBlock(nil,taskError,task); 
     } 
     else { 
      NSError* error; 
      NSDictionary* json = [NSJSONSerialization JSONObjectWithData:taskData options:kNilOptions error:&error]; 

      if (json) { 
       NSLog(@" JSON = %@",json); 
      } 
      else { 
       NSString* newStr = [[NSString alloc] initWithData:taskData encoding:NSUTF8StringEncoding]; 
       NSLog(@"Error: %@",newStr); 

      } 

      completionBlock(json,nil,task); 
     } 

    }); 
}]; 
[postDataTask resume]; 

しかし、これはサーバーにbase64文字列をアップロードしていません。私が間違っていることを助けてください。

+0

ところで、 'NSData * postData = postData = [NSJSONSerialization ...];は正しくありません。その余分な 'postData'を取り除く。同様に、 'NSString * postString = = ...'は正しくありません。あなたはそこに余分な '='を持っています... – Rob

+0

私はここにこれを書いていましたが、なぜこのように見えるのですか?コードでは完璧です –

答えて

0

JSONにbase64イメージを含める場合は、+文字。 x-www-form-urlencodedリクエストを作成する場合にのみ行います。

したがって、文字を%2Bに置き換えないでください。


Content-Typeヘッダーを2回設定しています。あなたのリクエストはJSONですので、image/pngヘッダーを削除してください。一部のWebサービスでは内容の種類がblithely想定されていますが、おそらくあなたの間違ったContent-Typeヘッダーが混乱しています。


まだ動作していない場合は、画像のBase64レンディションを作成したか、要求が正しくフォーマットされていない可能性があります。最終的な要求がどのように見えたかを見ずに知るのは難しい。 (b)正確にサーバーが探しているもの。

+0

まだアップロードされていません... –

+0

あなたのコンテンツタイプヘッダーはありません右。上の拡大された答えを見てください。 – Rob

関連する問題