Iphone 使用NSMutabaleDictionary和RKClient在Php服务器上包含图像并接收

Iphone 使用NSMutabaleDictionary和RKClient在Php服务器上包含图像并接收,iphone,objective-c,ios,rest,restkit,Iphone,Objective C,Ios,Rest,Restkit,1-如何使用NSMutableDictionary和RestKit客户端包含图片 我的服务器在下面的代码中从NSMutableDictionary接收数据 NSMutableDictionary *dictionary = [[NSMutableDictionary alloc] init]; [dictionary setObject:usernameTextfield.text forKey:@"username"]; [client put:@"/main/insert" params:

1-如何使用NSMutableDictionary和RestKit客户端包含图片

我的服务器在下面的代码中从NSMutableDictionary接收数据

NSMutableDictionary *dictionary = [[NSMutableDictionary alloc] init];
[dictionary setObject:usernameTextfield.text forKey:@"username"];

[client put:@"/main/insert" params:params delegate:self];
但如何同时附加图像

另一方面,RKParams在服务器端不适用于我

RKParams *params=[[RKParams alloc]init];
imageData = UIImagePNGRepresentation(imageField.image);
[params setData:imageData MIMEType:@"image/png" forParam:@"image"];
Rest服务器代码:

public function insert_put()
{
    $username = $this->put('username');

    $this->model->insertPost($username);

    //Question number 2.        

    $data['success'] = 'added successfully';
    $this->response($data, 200);
}

2-我如何从我的服务器(php)接收它?我使用看跌期权来解决这个问题。

好得多的问题。非常感谢。我取消了我的反对票

您的RestKit代码看起来不错,我认为是您的php代码失败了。RestKit将图像作为多部分/表单数据的一部分上载。此信息不会像您的用户名那样出现在您的正常放置数组中。我不确定您使用的是什么框架(这是REST控制器库吗?),但您可以使用_FILES['image']或您的服务器框架使用的任何东西来访问该文件$这->文件(“图像”)可能吗

编辑:

要创建混合参数文件,请尝试以下操作:

NSDictionary* strings = [NSDictionary dictionaryWithObjectsAndKeys: usernameTextfield.text, @"username", nil];
NSData* image = UIImagePNGRepresentation(imageView.image);
RKParams* params = [[RKParams alloc] initWithDictionary: strings];
[params setData: image MIMEType: @"image/png" withParameter: @"image"];

//And send it
[client put:@"/main/insert" params:params delegate:self];
但是现在你不能使用$this->put,而是使用$this->upload。例如:

$data = $this->upload->data();
$username = $data['username'];
$imagefile = $data['image'];

我只是做下面的事情

- (void) upload: (UIImage *) pic onLoad:(RKObjectLoaderDidLoadObjectBlock) loadBlock onError:(RKRequestDidFailLoadWithErrorBlock)failBlock{

    RKParams* imageParams = [RKParams params];
    NSData* imageData = UIImageJPEGRepresentation(pic, 0.7f);
    [imageParams setData:imageData MIMEType:@"image/jpg" forParam:@"FileUpload"];
    NSString *resourcePath = @"/api/upload/";

    RKObjectMapping *mapping = [[RKObjectManager sharedManager].mappingProvider objectMappingForClass:[KFMedia class]];

    [[RKObjectManager sharedManager] loadObjectsAtResourcePath:resourcePath usingBlock:^(RKObjectLoader *loader) {
        loader.method = RKRequestMethodPOST;
        loader.params = imageParams;
        [self settingsForLoader:loader withMapping:mapping onLoad:loadBlock onError:failBlock];

    }];

}

- (void) settingsForLoader: (RKObjectLoader *) loader withMapping: (RKObjectMapping *) mapping onLoad:(RKObjectLoaderDidLoadObjectBlock) loadBlock onError:(RKRequestDidFailLoadWithErrorBlock)failBlock{

    loader.objectMapping = mapping;
    loader.delegate = self;
    loader.onDidLoadObject = loadBlock;

    loader.onDidFailWithError = ^(NSError * error){
       //NSLog(@"%@",error);
    };
    loader.onDidFailLoadWithError = failBlock;
    loader.onDidLoadResponse = ^(RKResponse *response) {
        [self fireErrorBlock:failBlock onErrorInResponse:response];
    };

}

嗨,你能再看一下吗?更新的问题是,它的REST控制器。RKParams不能使用$this->put('username');在我的服务器中,但NSMutableDictionary可以。有没有办法用NSMutableDictionary附加图像?我修改了代码,但我对codeigniter不太熟悉。不,不要把图像放在字典里。这不是问题。它仍然不起作用。只有NSMutableDictionary适合我。您认为问题出在哪里?问题几乎肯定出在您的服务器端。我对你的框架不太了解,不能再多加评论了。您需要了解如何使用框架从多部分/表单数据字段提取数据。我尝试使用insert_post,它对RKParams有效。现在唯一的问题是如何获得图像。我尝试了$this->files、$\u文件和您上面建议的一个,但没有一个有效。始终获取未定义的索引:图像,未定义的索引:用户名。