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

1 – 如何使用带有RestKit Client的NSMutableDictionary包含图片?

我的服务器从我的代码下面的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"]; 

其余服务器代码:

 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将上传图像作为multipart / form-data的一部分。 这个信息不会像你的用户名那样出现在你的普通_PUT数组中。 我不确定你正在使用什么框架(是REST控制器库吗?),但是你可以使用_FILES ['image']或者你的服务器框架使用的任何东西来访问这个文件。 $ this-> files('image')也许?

编辑:

要创build一个混合的参数文件,试试这个:

 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]; }; }