2013-06-18 6 views
0

내 iPhone 응용 프로그램에서 ASIFormDataRequest를 사용하여 방금 녹화 한 비디오를 ID로 사용할 수있는 문자열과 함께 보내려고합니다. 동영상이 속합니다. 이렇게하기위한 코드는 다음과 같습니다.서버가 Objective-C의 ASIFormDataRequest에서 POST 요청을 올바르게받지 못한다.

-(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를 사용 해본 적은 없기 때문에 누락 된 몇 가지 간단한 단계가있는 것처럼 느껴지지만 도움이 될 것입니다.

편집 : 나는 setPostValue:_patientCodesetData:patientData을 변경하고 setPostValue 작동하지만 setDatasetFile이하지 않는 것처럼 보인다 그래서 지금 포스트의 그 부분이 제대로 보내지고 있습니다.

+0

내가 아는 바는 아니지만 ASIHTTPRequest 대신 AFNetworking을 사용하는 것이 좋습니다. –

답변

0

내가 뭔가를 읽고 뭔가 흥미로운 것을 알면서 대답을 찾았습니다. 업로드 한 파일은 배열이 아니라 $_FILES 배열로 들어가기 만했습니다. 또한 [request setData:patientData forKey:@"patientcode"];[request setPostValue:_patientCode forKey:@"patientCode"];으로 변경 한 다음 $_POST 배열에 나타났습니다. 그래서 내가 보낸 문자열과 내 PHP 스크립트에서 보내는 파일을 모두 얻을 수있었습니다.

0

-setData:forKey:-setFile:forKey: 대신 -addData:forKey:-addFile:forKey:을 사용해야합니다.

이외의 경우 DEBUG_FORM_DATA_REQUEST으로 컴파일 할 때 디버그 출력을 확인하십시오.

-addPostValue:forKey:을 사용할 때 -addFile:forKey:application/x-www-form-urlencoded 요청을 사용하는 경우 multipart/form-data 요청을 보내야합니다.

서버가 multipart/form-data 요청을 처리합니까?