0

1-RestKitクライアントで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)からどのように受信できますか?私はこれにプットオプションを使用しています。

4

2 に答える 2

0

はるかに良い質問です。ありがとうございました!反対票を削除しました。

あなたの RestKit コードは問題ないようです。失敗しているのはあなたの php コードだと思います。RestKit は画像を multipart/form-data の一部としてアップロードします。この情報は、ユーザー名のように通常の _PUT 配列には表示されません。どのフレームワークを使用しているかはわかりませんが (それは REST コントローラー ライブラリですか?)、_FILES['image'] またはサーバー フレームワークが使用するものを使用してファイルにアクセスできます。$this->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'];
于 2012-06-25T13:41:52.293 に答える
0

私はちょうど次のことをします

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

}
于 2012-06-26T13:23:49.800 に答える