2016-12-03 21 views
0

画像をベース64とNSDataに変換して、UIImageを.Netサーバーにアップロードしようとしています。しかし、私は応答をnullにしています。ここに私のコードです。POSTメソッドを使用して.netサーバーに画像をアップロード

NSString *base64Encoded = [imageData base64EncodedStringWithOptions:NSDataBase64EncodingEndLineWithLineFeed]; 
NSString *post= [NSString stringWithFormat:@"myServerSideUrl?Image=%@",base64Encoded]; 

NSLog(@"PostData: %@",post); 

NSString* webStringURL = [post stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLFragmentAllowedCharacterSet]]; 

NSURL* url = [NSURL URLWithString:webStringURL]; 

NSData *postData = [post dataUsingEncoding:NSASCIIStringEncoding allowLossyConversion:YES]; 

NSString *postLength = [NSString stringWithFormat:@"%lu", (unsigned long)[postData length]]; 
NSMutableURLRequest *request = [[NSMutableURLRequest alloc] init]; 
[request setURL:url]; 
[request setHTTPMethod:@"POST"]; 
[request setValue:postLength forHTTPHeaderField:@"Content-Length"]; 
[request setValue:@"application/json" forHTTPHeaderField:@"Accept"]; 
[request setValue:@"application/x-www-form-urlencoded" forHTTPHeaderField:@"Content-Type"]; 
[request setHTTPBody:postData]; 
NSError *error; 
NSHTTPURLResponse *response = nil; 
NSData *urlData=[NSURLConnection sendSynchronousRequest:request returningResponse:&response error:&error]; 
NSData *responseData = [[NSData alloc]initWithData:urlData]; 

if ([response statusCode] >=200) 
{ 
    NSDictionary *jsonData = [NSJSONSerialization JSONObjectWithData: responseData options:0 error:nil]; 

    NSLog(@"%@",jsonData); 
} 

いくつかの時間後、私は、URLが長すぎるHttpResponseCodeのように示す郵便配達でチェック:414。また、私はNSData形式の画像をAFNetworkを使って送信しようとしましたが、同じ応答が得られました。そして、私はちょうどこれについて語りました、体の中にベース64の文字列を送るように言ってください。本文に画像を送信しようとすると、サーバー側で画像を取得できません。彼らはGETメソッドのようなAPIを作成していますが、実際のメソッドはPOSTです。これについて他に解決策がありますか?助言がありますか。

+0

解決策は見つかりましたか? –

+0

まだありません。バックエンド側を変更しようとしています。 – Naveen

+0

郵便配達員からフォームのURL応答(Get)を投稿できますか? –

答えて

0

Key-Valueペアを定義せずにリクエストボディにNSDataを設定しています。

...

- (void) uploadFileRequestWithHttpHeaders:(NSMutableDictionary*) headers 
          withServiceName:(NSString*) serviceName 
          withParameters:(NSMutableDictionary*) params 
          withFileData:(NSArray*) files 
{ 

    NSString *serviceUrl = [httpBaseURL stringByAppendingPathComponent:serviceName]; 

    if (headers == nil) 
    { 
     NSDictionary *headers = [[NSDictionary alloc] initWithObjectsAndKeys:@"multipart/form-data",@"Content-Type",nil]; 
     [self setHeaders:headers]; 
    } 
    else 
    { 
     [headers setObject:@"multipart/form-data" forKey:@"Content-Type"]; 
     [self setHeaders:headers]; 
    } 

    [httpSessionManager POST:serviceUrl 
        parameters:params 
    constructingBodyWithBlock:^(id<AFMultipartFormData> formData) { 

     for (NSData *fileData in files) 
     { 
      [formData appendPartWithFileData:fileData name:@"userProfileImg" fileName:@"profile_pic.jpg" mimeType:@"image/jpeg"]; 
     } 
    } 
        success:^(NSURLSessionDataTask *task, id responseObject) { 

         if (success != nil) 
        } 
        failure:^(NSURLSessionDataTask *task, NSError *error) { 

         if (failure != nil) 
        }]; 
} 


- (void) setHeaders:(NSDictionary*) headers 
{ 
    if (headers != nil) 
    { 
     NSArray *allHeaders = [headers allKeys]; 

     for (NSString *key in allHeaders) 
     { 
      [httpSessionManager.requestSerializer setValue:[headers objectForKey:key] forHTTPHeaderField:key]; 
     } 
    } 
} 

- (void) addQueryStringWithParams:(NSDictionary*) params 
{ 
    [httpSessionManager.requestSerializer setQueryStringSerializationWithBlock:^NSString *(NSURLRequest *request, NSDictionary *parameters, NSError *__autoreleasing *error) { 
     __block NSMutableString *query = [NSMutableString stringWithString:@""]; 

     NSError *err; 
     NSData *jsonData = [NSJSONSerialization dataWithJSONObject:params options:0 error:&err]; 
     NSMutableString *jsonString = [[NSMutableString alloc] initWithData:jsonData encoding:NSUTF8StringEncoding]; 

     query = jsonString; 

     return query; 
    }]; 
} 

をAFNetworkingを使用してこのコードを試してみて、このように、このメソッドを呼び出す。..

NSArray *objects = [NSArray arrayWithObjects:@"multipart/form-data",@"1.0",@"ios",token, nil]; 
NSArray *Keys = [NSArray arrayWithObjects:@"content-type",@"version",@"os",@"token", nil]; 
NSMutableDictionary *headers = [[NSMutableDictionary alloc]initWithObjects:objects forKeys:Keys]; 

NSMutableDictionary *paraDic = [[NSMutableDictionary alloc] init]; 
[paraDic setObject:self.userNameField.text forKey:@"name"]; 
NSData * userProfileImg = UIImageJPEGRepresentation(image, 0.8f); 
imageDataArray = [NSArray arrayWithObjects:userProfileImg, nil]; 


[self uploadFileRequestWithHttpHeaders:headers withServiceName:@"updateProfile" withParameters:params withFileData:files]; 
+0

お返事ありがとうございます。私はあなたのコードを統合しようとしています。宣言されていない識別子 "httpSessionManager"のようなAFHTTPSessionManager.hをインポートした後。あなたは私にこれを提案できますか?どのファイルをインポートする必要があります。 – Naveen

+0

これはあなたのクラスで宣言する必要があるインスタンスです。 /** * HTTPセッションマネージャー(AFNetworkingクライアント) */ AFHTTPSessionManager * httpSessionManager; ** **すべてのhttp通信のベースURL */ NSString * httpBaseURL; –

+0

もう一度、私はdidFinishPickingMediaWithInfoでサービスコールを実装しています。私はdidFinishPickingMediaWithInfoで実装しているone.soによってイメージをアップロードする必要があります。私は上記のメソッド宣言されていない識別子のトークンとファイルも実装しようとしていますが。 – Naveen

0

あなたはNSURLSession使用してこのコードを試すことができます -

- (void)postRequestForSubmitDataToServer { 


    //Put your action URL 
    NSURL *aUrl = [NSURL URLWithString:@"action_url.php?&attachment=att&submit=submit"]; 

    NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:aUrl 
                  cachePolicy:NSURLRequestUseProtocolCachePolicy 
                 timeoutInterval:60.0]; 
    [request setHTTPMethod:@"POST"]; 

    NSURLSessionConfiguration *configuration = [NSURLSessionConfiguration defaultSessionConfiguration]; 
    NSURLSession *session = [NSURLSession sessionWithConfiguration:configuration delegate:self delegateQueue:nil]; 
    NSURLSessionDataTask *postDataTask = [session dataTaskWithRequest:request completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) { 
     if(error == nil) { 
      //change JSON type according to ur need. 
      NSArray *JSON = [NSJSONSerialization JSONObjectWithData:data options: NSJSONReadingMutableContainers error: &error]; 
      NSLog(@"Data = %@",JSON); 

     } else { 
      NSLog(@"%@", error); 
     } 

    }]; 

    [postDataTask resume]; 
} 

をマイフォームデータ -

<form action="action_url.php" method="post" enctype="multipart/form-data"> 
Your Photo: <input type="file" name="attachment" size="25" /><br> 
<input type="submit" name="submit" value="Submit" /> </form> 
+0

申し訳ありませんディパンカー、あなたは私の質問を理解していません。私のURLはこのような形式です@ "action_url.php?image =%@、Submit =%@"私はURLのみで画像を送信しなければなりません。 – Naveen

+0

申し訳ありません。同じURLを表示するには時間がかかりすぎます。もう1つは、フォームデータが何であるかを知る必要があります。 – Naveen

+0

フォームデータは、フォームURLのポストマンからの応答です。 –

関連する問題