使用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]; }; }
- 如果全宽并位于textContainer顶部,则UITextView textContainer排除path将失败
- 使用NSFileManager更新复制文件中的进度条
- 如何使用Objective C将JSON解析数据存储到Plist中?
- iOS 7导航栏跳转/拉伸viewDidAppear
- 从故事板连接到Swift视图控制器文件的UITextFieldinput
- UITabbarController Swift中的UISplitViewController
- Swift 3和缺乏递归协议约束
- 显示UIAlertView时不能使用控制中心(iOS 7)
- iOS和Xcode:如何给一个segue一个“故事板ID”,以便我可以通过编程操作它