HTTP / 1.1 200 213 на Tomcat при загрузке файла JPEG с помощью RESTKit - PullRequest
0 голосов
/ 12 августа 2011

Все, я использую RestKit для iOS, чтобы загрузить файл JPEG в мой веб-сервис Java.Я упомянул этот

учебник по разработке веб-службы загрузки файлов, и он прекрасно работает, когда я использую его через веб-браузер.

Однако, когда я пытаюсь загрузитьфайл, используя RESTKit, затем в журналах TOMCAT я получаю код состояния HTTP / 1.1 200 213, и мой файл не загружен.

Вот мой код RESTKit:

 RKObjectManager* manager = [RKObjectManager sharedManager]; 
RKObjectLoader* objectLoader = [manager objectLoaderWithResourcePath:@"/fileuploaded" delegate:self];
objectLoader.method = RKRequestMethodPOST;

UIImage *image = [UIImage imageNamed:@"rental_car_bill.jpeg"];
NSData *imageData = UIImageJPEGRepresentation(image, 1.0); 
// attach image 
RKParams *params = [RKParams paramsWithDictionary:(NSDictionary*)objectLoader.params]; 
RKParamsAttachment *attachment = [params setData:imageData 
                                        MIMEType:@"image/jpeg" forParam:@"photo"]; 
attachment.fileName = @"samplejpeg";
objectLoader.params = params;
objectLoader.targetObject = self;
[objectLoader send];

РЕДАКТИРОВАТЬ: Вышеописанная реализация работает, и файл загружается.Тем не менее, в методе делегата: - (void) objectLoader: (RKObjectLoader *) objectLoader didLoadObjects: (NSArray *) objects

После того, как это выходит за рамки этого, мое приложение падает на [RKObjectLoader dealloc];

1 Ответ

0 голосов
/ 28 мая 2012

Для загрузки изображений с помощью restkit я использую следующие методы, я предпочитаю использовать блоки, чтобы избежать некоторых проблем в моем приложении, возможно, таким образом, вы можете избежать сбоя:

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

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


    //My API Server will return a JSON that represents my KFMedia Class after uploading the image, so here I get the propper mapping for that
    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];
    };

}
...