0

我试图在我的 iPhone 应用程序中使用 ASIFormDataRequest 将我刚刚录制的视频发送到服务器,以及我可以用来标识视频所属的字符串。这样做的代码在这里:

-(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,但我们将不胜感激任何帮助。

编辑:我更改了setData:patientDatato setPostValue:_patientCode,现在帖子的一部分已正确发送,所以看起来好像setPostValue有效setData,但setFile没有。

4

2 回答 2

0

您应该使用-addData:forKey:and-addFile:forKey:而不是-setData:forKey:and -setFile:forKey:

除此之外,在编译时检查调试输出DEBUG_FORM_DATA_REQUEST

您应该在使用时发送请求multipart/form-data,在使用时发送请求。-addFile:forKey:application/x-www-form-urlencoded-addPostValue:forKey:

您的服务器是否处理multipart/form-data请求?

于 2013-06-19T00:06:25.793 回答
0

我最终在阅读其他内容时找到了答案,并注意到他们做了一些有趣的事情:我上传的文件只是进入了$_FILES数组,而不是$_POST数组。我也更改[request setData:patientData forKey:@"patientcode"];[request setPostValue:_patientCode forKey:@"patientCode"];然后它出现在$_POST我想要的数组中,因此我能够在我的 php 脚本中获取我正在发送的字符串和我正在发送的文件。

于 2013-06-19T16:31:03.590 回答