Отправить аудио файл и строку JSON в iOS - PullRequest
3 голосов
/ 03 марта 2012

Я пытаюсь отправить аудиофайл и строку JSON на сервер PHP.С помощью следующего кода отправим JSON, но файл прибудет пустым.Если я помещу блок JSON ниже аудиоблока, файл с полностью прибывает, но 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);
}

Ответы [ 2 ]

0 голосов
/ 24 сентября 2012

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

Посмотрите здесь для получения информации о кодировке Base64 на Mac и iOS.

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

0 голосов
/ 05 марта 2012

Код выше верен.

PHP-код искал переменную файла file, когда он должен искать recording.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...