2013-06-18 3 views
0

Я пытаюсь использовать ASIFormDataRequest в своем приложении iPhone для отправки видео, которое я только что записал на сервер, а также строки, которую я могу использовать для ID, кто видео принадлежит. Код для этого здесь:Сервер не получает POST-запрос от ASIFormDataRequest в Objective-C

-(void)imagePickerController:(UIImagePickerController *)picker didFinishPickingMediaWithInfo:(NSDictionary *)info { 
    NSURL *urlvideo = [info objectForKey:UIImagePickerControllerMediaURL]; 
    NSString *urlString=[urlvideo path]; 
    NSLog(@"urlString=%@",urlString); 
    NSString *str = [NSString stringWithFormat:@"http://www.mysite.com/videodata.php"]; 
    NSURL *url = [NSURL URLWithString:[str stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]]; 
    ASIFormDataRequest *request = [ASIFormDataRequest requestWithURL:url]; 
    NSData *patientData = [_patientCode dataUsingEncoding:NSUTF8StringEncoding]; 
    [request setFile:urlString forKey:@"video"]; 
    [request setData:patientData forKey:@"patientcode"]; 
    [request setRequestMethod:@"POST"]; 
    [request setDelegate:self]; 
    [request startSynchronous]; 
    NSLog(@"responseStatusCode: %i",[request responseStatusCode]); 
    NSLog(@"responseString: %@",[request responseString]); 
    [picker dismissViewControllerAnimated:YES completion:nil]; 
} 

Все кажется работать правильно, я получаю код статуса 200 и метод отделки, как и ожидалось. Однако, по-видимому, ничего не получает php-файл на сервере. Я добавил эту строку в мой серверный код PHP:

echo(count($_POST));

Это возвращает 0, так что кажется, как будто ничего не на самом деле получить размещенные ASIFormDataRequest. Я чувствую, что может быть какой-то простой шаг, который мне не хватает, поскольку я никогда раньше не использовал ASIFormDataRequest, но любая помощь была бы весьма признательна.

EDIT: Я изменил setData:patientData к setPostValue:_patientCode и теперь, когда часть поста послана правильно, так что кажется, как будто setPostValue работ, но setData и setFile нет.

+0

Я знаю, что это не то, что вы просили, но вы действительно должны думать об использовании AFNetworking вместо ASIHTTPRequest. –

ответ

0

В итоге я нашел ответ, читая что-то еще, и заметил, что они сделали что-то интересное: файл, который я загрузил, просто перешел в массив $_FILES, а не массив $_POST. Я также изменил [request setData:patientData forKey:@"patientcode"]; на [request setPostValue:_patientCode forKey:@"patientCode"];, а затем появился в массиве $_POST, как и я, поэтому мне удалось получить как строку, которую я отправлял, так и файл, который я отправлял в своем php-скрипте.

0

Вы должны использовать -addData:forKey: и -addFile:forKey: вместо -setData:forKey: и -setFile:forKey:.

Кроме этого, проверяйте вывод отладки при компиляции с помощью DEBUG_FORM_DATA_REQUEST.

Вы должны отправить запрос multipart/form-data при использовании -addFile:forKey: и запрос application/x-www-form-urlencoded при использовании -addPostValue:forKey:.

Выполняет ли ваш сервер обработку multipart/form-data запросов?

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