2011-12-06 31 views
1

HTTP PUTメソッドでサーバー側にbase64エンコードされた画像文字列を渡しています。何回か試してみましたが、応答としてエラーメッセージが表示されています。そのエラーメッセージは、サーバー側でnull値が取得されているためです。私はアンドロイドコードで、同じことを確認して、うまく動作しています。私は私のコードを以下に添付しています。画像アップロードの問題 - base64エンコーディング

SBJSON *parser = [[SBJSON alloc] init]; 
NSString *url=[NSString stringWithFormat:@"The URL i am using"] ; 
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:url]];  
[request setValue:@"application/x-www-form-urlencoded" forHTTPHeaderField:@"Content-Type"]; 
[request setValue:@"application/json" forHTTPHeaderField:@"Accept"]; 
[request setValue:@"XXXXX" forHTTPHeaderField:@"USER_AGENT"]; 

[request setHTTPMethod:@"PUT"]; 
NSString *input=[NSString stringWithFormat:@"abc[image]=%@",base64encodedString]; 
[request setHTTPBody:[input dataUsingEncoding:NSUTF8StringEncoding allowLossyConversion:YES]]; 

NSData *response = [NSURLConnection sendSynchronousRequest:request returningResponse:nil error:nil];  
NSString *json_string = [[NSString alloc] initWithData:response encoding:NSASCIIStringEncoding];   
NSDictionary *statuses = [parser objectWithString:json_string error:nil];  
[parser release]; 

[json_string release]; 
return statuses; 

私はこのようなサーバ側からのエラーメッセージを取得しています:「xxxxxx.jpgを 『識別』コマンドで認識されていません。」

解決策をお勧めします。

最後に、「application/x-www-form-urlencoded」からコンテンツタイプを「multipart/form-data」に変更する必要があることがわかりました。誰もこの方法でBase encoded stringsを渡す方法を教えてください。 Pls ...私は過去20日間この問題の背後にいます...

+0

allowLossyConversion:データのYESは良い考えではありません。 サーバー側で受け取ったものをダンプしてみてください。 – ssteinberg

+0

@ssteinberg:私はサーバー側から来るエラーメッセージを追加しました。あなたの助言にも感謝します。返信いただきありがとうございます。 – Praveen

答えて

0

Base64ルーチンに違いがあるかもしれません。 Base64はサーバーとiPhoneで同じデータをエンコードして比較します。

シミュレータを使用すると、MacでWiresharkなどのネットワークスヌーパを使用して、実際に何が出ているのか、サーバーからの完全な戻り値を確認できます。 SSLを使用している場合は、MacアプリCharlesを使用してデータを見ることができます。

+0

私はサンプルのWebサービスを作成し、ローカルサーバーにチェックインしました。私は問題が私の側にあることを理解しました。つまり、エンコードされているか、エンコードされた文字列を渡すことができます。しかし、私はベース64エンコードされたイメージをデコードし、元のイメージを正常に取得しました。 NSString [野生の推測のみ]の最大範囲はありますか?何がうまくいかないのですか? – Praveen

+0

まもなくサーバーが受信していないか、私たちの側からデータが送信されています...問題はbase64でエンコードされた文字列を渡すときだけです... – Praveen

+0

Wiresharkを使用すると、それはかなり簡単で無料です。個人的に私はチャールズを使用します。 – zaph

関連する問題