AFNetworking multipartFormRequestWithMethod适用于模拟器,但不适用于设备

时间:2013-01-30 10:46:52

标签: php ios web-services afnetworking

我尝试使用AFNetworking框架将图像数据发布到我的Web服务。当我使用模拟器运行我的应用程序时一切都很好但是当我在iPad上运行应用程序时,Web服务不会收到任何图像数据($ _FILES返回nil)。这可能是AFNetworking中的一个错误吗?

客户代码:

- (NSMutableURLRequest *)POSTRequestForImage:(NSString *)imagePath ForPrepfile:(NSString *)objectId 
{
    NSData *imageData = UIImagePNGRepresentation([UIImage imageWithContentsOfFile:imagePath]);
    NSURL *url = [[NSURL alloc] initFileURLWithPath:[imagePath stringByAddingPercentEscapesUsingEncoding:NSUTF8StringEncoding]];
    if (imageData == nil) {
        NSLog(@"no data");
    }
    NSString *imageName = [imagePath lastPathComponent];
    NSDictionary *parameters = [NSDictionary dictionaryWithObjectsAndKeys:imageName, @"filename", objectId, @"objectId", nil];
    NSLog(@"imagename: %@", imageName);

    NSMutableURLRequest *request = [self multipartFormRequestWithMethod:@"POST" path:@"images" parameters:parameters constructingBodyWithBlock: ^(id <AFMultipartFormData>formData) {
        [formData appendPartWithFileData:imageData name:@"image" fileName:imageName mimeType:@"image/png"];
    }];
    NSLog(@"picture request fileurl: %@", url);
    return request;
}

使用SLIM框架的PHP脚本:

$app->post('/images', function () use ($app) {
    $pa = new PrepAppDB();
    $out = $app->request()->post();

    // file upload
    $fileName = $_FILES['image']['name'];
    $tmpName  = $_FILES['image']['tmp_name'];
    $fileSize = $_FILES['image']['size'];
    $fileType = $_FILES['image']['type'];

if(move_uploaded_file($tmpName, $fileName))
   {
    $result = $pa->updateRow('image', $out);
    header("Content-Type: application/json");
    echo json_encode($result);
   } else {
     sendResponse(400, 'fail');
   }

});

我感谢任何帮助!

------------------------- EDIT --------------------- ----------

我测试了$_FILES是否为空,但事实并非如此。通过iPad发送图片时,我通过“$ _FILES ['image'] ['name']”获取文件名,但其他变量为空。 我还在appendPartWithFileData:测试了我追加到我的请求的图像数据,看起来也没问题。 我真的没有线索......没人能帮忙吗?谢谢!

1 个答案:

答案 0 :(得分:1)

愚蠢的我......问题是iPad上的图像尺寸太大,所以服务器不接受它; - )