2011-12-06 2 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 인코딩 된 문자열을 전달하는 방법을 알려주시겠습니까? Pls ... 지난 20 일 동안이 문제의 배경입니다 ...

+0

allowLossyConversion : 데이터에 대한 YES는 좋지 않습니다. 서버 측에서받은 것을 덤프 해보십시오. – ssteinberg

+0

@ssteinberg : 서버 쪽에서 오는 오류 메시지를 추가했습니다. 또한 조언 해 주셔서 감사합니다. 답장을 보내 주셔서 감사합니다. – Praveen

답변

0

Base64 루틴에 차이가있을 수 있습니다. Base64는 서버와 iPhone에서 동일한 데이터를 인코딩하고 비교합니다.

시뮬레이터를 사용하여 Mac에서 Wireshark과 같은 네트워크 스누커를 사용하여 실제 나가는 내용과 서버의 전체 복귀를 확인합니다. SSL을 사용하는 경우 Mac 응용 프로그램 Charles을 사용하여 데이터를 볼 수 있습니다.

+0

샘플 웹 서비스를 만들고 로컬 서버를 체크인했습니다. 그 문제는 내 측면에 있다는 것을 알았습니다. 즉, 인코딩 된 문자열이나 인코딩 된 문자열을 전달할 수 있습니다. 하지만 난 기본 64 인코딩 된 이미지를 디코딩하고 성공적으로 원래 이미지를 검색했습니다. NSString에 대한 최대 범위가 있습니까? 무슨 일 이니? – Praveen

+0

곧 서버가 수신되지 않거나 우리 쪽에서 데이터가 전송되고 있습니다 ... 문제는 base64 인코딩 된 문자열을 전달할 때입니다 ... – Praveen

+0

Wireshark를 사용하면 비교적 쉽고 무료입니다. 개인적으로 저는 Charles를 사용합니다. – zaph