2011-05-04 4 views
1

저는 지금 며칠 동안이 작업을 해왔습니다. 나는 많은 연구를했고 많은 다른 것들을 시도했지만 아무것도 작동하지 않는 것 같습니다. 게시 된 코드는 작업에 가장 가까운 코드입니다. 모든 데이터는 이미지를 제외하고 데이터베이스에 채워집니다. 이게에서 얻으려고 노력하는 것은 UIImagePNGRepresentation (이미지)에 의해 반환되는 정확한 데이터를 게시 할 수있게하는 것입니다. 나는 이것이 바이너리 데이터라고 가정하지만 100 %는 아니다. 어떤 도움을 주시면 감사하겠습니다. 감사!iPhone : 다른 양식 데이터와 함께 UIImage의 이진 데이터를 웹에 게시하십시오.

-(void)sendFormData:(NSArray*)data{ 
// add boundary 
NSString *[email protected]"----Boundary+AaB03x"; 

// create array of php vars 
NSArray *phpVariables=[NSArray arrayWithObjects:@"username",@"picture",@"firstName",@"lastName",@"phone",@"email",@"password",nil]; 
// create body data 
NSMutableData *body=[[NSMutableData alloc] init]; 

// dictionary of fields 
NSMutableDictionary *formFields=[[NSMutableDictionary alloc] init]; 
// fill dictionary 
for(int i=0; i<[data count]-1; i++) [formFields setObject:[data objectAtIndex:i] forKey:[phpVariables objectAtIndex:i]]; 


NSMutableURLRequest *urlRequest=[[NSMutableURLRequest alloc] initWithURL:[NSURL URLWithString:@"MY_URL"]]; 
[urlRequest setHTTPMethod:@"POST"]; 
[urlRequest setValue:[NSString stringWithFormat:@"multipart/form-data, boundary=%@",boundary] forHTTPHeaderField:@"Content-Type"]; 

NSEnumerator *dictionaryEnumerator=[formFields keyEnumerator]; 
NSString *currentKey=nil; 
while((currentKey=[dictionaryEnumerator nextObject])){ 
    id currentValue=[formFields objectForKey:currentKey]; 
    if([currentValue class]==[UIImage class]){ 
     [body appendData:[[NSString stringWithFormat:@"--%@\r\n", boundary] dataUsingEncoding:NSUTF8StringEncoding]]; 
     [body appendData:[[NSString stringWithFormat:@"Content-Disposition: form-data; name=\"%@\"; filename=\"myphoto.png\"\r\n",currentKey] dataUsingEncoding:NSUTF8StringEncoding]]; 
     [body appendData:[@"Content-Type: image/x-png\r\n" dataUsingEncoding:NSASCIIStringEncoding]]; 
     [body appendData:[@"Content-Transfer-Encoding: binary\r\n\r\n" dataUsingEncoding:NSUTF8StringEncoding]]; 
     [body appendData:UIImagePNGRepresentation(currentValue)]; 
     [body appendData:[[NSString stringWithFormat:@"\r\n--%@--\r\n",boundary] dataUsingEncoding:NSUTF8StringEncoding]]; 
    } 
    else{ 
     [body appendData:[[NSString stringWithFormat:@"--%@\r\nContent-Disposition: form-data; name=\"%@\"\r\n\r\n%@\r\n",boundary,currentKey,currentValue] dataUsingEncoding:NSUTF8StringEncoding allowLossyConversion:NO]]; 
    } 
} 

[urlRequest setHTTPBody:body]; 

NSURLResponse *response; 
NSError *error; 
NSData *serverResponseData=[NSURLConnection sendSynchronousRequest:urlRequest 
               returningResponse:&response 
                  error:&error]; 
[body release]; 
[formFields release]; 

NSString *serverResponseString=[[NSString alloc] initWithData:serverResponseData 
                encoding:NSUTF8StringEncoding]; 
[self performSelectorOnMainThread:@selector(showServerResponseWithString:) 
         withObject:serverResponseString 
        waitUntilDone:FALSE]; 
} 

UPDATE :

위의 코드는 잘 작동하고 실제로 PHP에 문제가 있었다.

답변

1

이러한 것들 (https://github.com/pokeb/asi-http-request/tree)에는 ASIFormDataRequest를 사용하는 것이 좋습니다. 약간의 실수로 쉽게 요청을 할 수없는 낮은 수준의 요청을 피할 수 있습니다.

관련 문제