2012-03-03 1 views
3

Я пытаюсь отправить как аудиофайл, так и строку JSON на сервер PHP. Следующий код отправит JSON, но файл будет пуст. Если я поставлю блок JSON под звуковым блоком, файл полностью выйдет, но JSON пуст. Есть предположения?Отправить аудиофайлы FILE и JSON в iOS

- (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 искал переменную файла file, когда он должен искать recording.

0

Вы можете отправить файл легко как строковый параметр, преобразовывая двоичный код в строку Base64.

Посмотрите на here информацию о кодировке Base64 на Mac и iOS.

Надеюсь, это поможет :)

+0

Просто обратите внимание, что строка будет примерно на 30% больше, чем двоичная. –

Смежные вопросы