2011-12-06 77 views
1

我使用HTTP PUT方法將base64編碼的圖像字符串傳遞到服務器端。我嘗試了幾次,但得到錯誤消息作爲響應。該錯誤消息是因爲空值正在服務器端。我已經檢查了相同的,在android代碼和它的工作很好。我在下面附上我的代碼。圖像上傳中的問題 - 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不能被'identify'命令識別。

請提出解決方案。

最後我發現內容類型應該從「application/x-www-form-urlencoded」改爲「multipart/form-data」。任何人都可以告訴我如何通過基地編碼的字符串使用這種方式?請...在過去的20天裏,我在這個問題背後......

+0

allowLossyConversion:數據是YES不是一個好主意。 嘗試轉儲您在服務器端收到的內容。 – ssteinberg

+0

@ssteinberg:我已經添加了來自服務器端的錯誤消息..也感謝您的建議。 – Praveen

回答

0

Base64例程可能有所不同。 Base64在服務器和iPhone上編碼相同的數據並進行比較。

使用模擬器在Mac上使用網絡窺探器(如Wireshark)來查看實際發生的情況以及服務器的完整返回情況。如果您使用SSL,則可以使用Mac應用程序Charles查看數據。

+0

感謝您的回覆。我創建了一個示例web服務並在我的本地服務器中籤入。從那我明白,問題是在我身邊,即可能在編碼或傳遞編碼的字符串。但我已經解碼了base 64編碼圖像併成功檢索到原始圖像。 NSString有沒有最大範圍[只有瘋狂的猜測]?出了什麼問題? – Praveen

+0

簡而言之,服務器沒有收到,或者我們正在發送數據失敗,我們這邊...問題是隻有當通過base64編碼的字符串... – Praveen

+0

使用Wireshark,它是相當簡單和自由。我個人使用查爾斯。 – zaph