2012-03-03 5 views
3

오디오 파일과 JSON 문자열을 모두 PHP 서버로 보내려고합니다. 다음 코드를 사용하면 JSON이 전송되지만 파일은 비어있게됩니다. JSON 블록을 오디오 블록 아래에 배치하면 파일이 완전히 도착하지만 JSON은 비어 있습니다. 이견있는 사람?iOS에서 오디오 FILE 및 JSON 문자열 보내기

- (void)sendFile:(NSString *)filePath URL:(NSString *)urlString JSON:(NSData *)jsonBody 
    { 
     NSString *jsonString = [[NSString alloc] initWithData:jsonBody encoding:NSUTF8StringEncoding]; 
     NSMutableURLRequest *request = [[NSMutableURLRequest alloc] init]; 
     [request setURL:[NSURL URLWithString:urlString]]; 
     [request setHTTPMethod:@"POST"]; 

     if ([defaults objectForKey:@"UserToken"]) { 
      // add the header to the request. 
      [request addValue:[defaults objectForKey:@"UserToken"] forHTTPHeaderField:@"token"]; 
     } 

     NSString *boundary = [NSString stringWithString:@"---------------------------14737809831466499882746641449"]; 
     NSString *contentType = [NSString stringWithFormat:@"multipart/form-data; boundary=%@",boundary]; 
     [request addValue:contentType forHTTPHeaderField: @"Content-Type"]; 


     NSMutableData *body = [NSMutableData data]; 
     [body appendData:[[NSString stringWithFormat:@"\r\n--%@\r\n", boundary] dataUsingEncoding:NSUTF8StringEncoding]]; 
     [body appendData:[[NSString stringWithString:@"Content-Disposition: form-data; name=\"body\"\r\n"] dataUsingEncoding:NSUTF8StringEncoding]]; 
     [body appendData:[[NSString stringWithString:@"Content-Type: application/json\r\n\r\n"] dataUsingEncoding:NSUTF8StringEncoding]]; 
     [body appendData:[[NSString stringWithFormat:@"%@\r\n", jsonString] dataUsingEncoding:NSUTF8StringEncoding]]; 

     [body appendData:[[NSString stringWithFormat:@"\r\n--%@\r\n", boundary] dataUsingEncoding:NSUTF8StringEncoding]]; 
     [body appendData:[[NSString stringWithString:@"Content-Disposition: form-data; name=\"recording\"; filename=\"recording.wav\"\r\n"] dataUsingEncoding:NSUTF8StringEncoding]]; 
     [body appendData:[[NSString stringWithString:@"Content-Type: application/octet-stream\r\n\r\n"] dataUsingEncoding:NSUTF8StringEncoding]]; 
     [body appendData:[NSData dataWithContentsOfFile:filePath]]; 
     [body appendData:[[NSString stringWithFormat:@"\r\n--%@--\r\n", boundary] dataUsingEncoding:NSUTF8StringEncoding]]; 

     // set request body 
     [request setHTTPBody:body]; 

     // send the request (submit the form) and get the response 
     NSData *returnData = [NSURLConnection sendSynchronousRequest:request returningResponse:nil error:nil]; 
     NSString *returnString = [[NSString alloc] initWithData:returnData encoding:NSUTF8StringEncoding]; 

     NSLog(@"%@", returnString); 
} 
+0

파일을 서버의 디스크에 쓰는 방법을 알려주시겠습니까? 백엔드는 무엇을 사용하고 있습니까? – 8vius

답변

0

위 코드가 정확합니다.

PHP 코드는 recording을 찾아야 할 때 파일 변수 file을 찾고있었습니다.

0

바이너리를 Base64 문자열로 변환하면 파일을 문자열 매개 변수로 쉽게 보낼 수 있습니다.

Mac 및 iOS의 Base64 인코딩에 대한 정보는 here을 참조하십시오.

도움이 되길 바랍니다.

+0

문자열이 바이너리보다 약 30 % 클 것입니다. –

관련 문제