2015-04-04 3 views
2

Я пытаюсь опубликовать изображение на своем сервере с помощью RestKit и ответа на карту с сервера. Но сервер всегда обратно тот файл, который я отправляю, равен нулю. Может ли кто-нибудь помочь мне в этом вопросе?ios RestKit post прикреплен UIImage

NSData *data = UIImageJPEGRepresentation(imageData, 1.0); 



NSDictionary *params = [[NSDictionary alloc] initWithObjectsAndKeys: 
         data, @"avatar", 
         nil]; 


RKObjectMapping* objectMapping = [RKObjectMapping mappingForClass:[UpdateAvatar class]]; 
[objectMapping addAttributeMappingsFromDictionary:@{ 
                @"message" : @"message" 
                }]; 

NSIndexSet *successStatusCodes = RKStatusCodeIndexSetForClass(RKStatusCodeClassSuccessful); 

RKResponseDescriptor *responseDescriptor = [RKResponseDescriptor responseDescriptorWithMapping:objectMapping 
                         method:RKRequestMethodPOST 
                        pathPattern:nil 
                         keyPath:nil 
                        statusCodes:successStatusCodes]; 

RKObjectManager *objectManager = [RKObjectManager managerWithBaseURL:[self defineBaseUrl]]; 
[[objectManager HTTPClient] setDefaultHeader:@"device_uid" value:[self getDeviceUid]]; 
[RKMIMETypeSerialization registerClass:[RKNSJSONSerialization class] forMIMEType:@"image/jpeg"]; 
[objectManager setAcceptHeaderWithMIMEType:@"multipart/form-data"]; 
[objectManager setRequestSerializationMIMEType:RKMIMETypeJSON]; 
objectManager.requestSerializationMIMEType = RKMIMETypeJSON; 
[objectManager addResponseDescriptor:responseDescriptor]; 
[objectManager postObject:nil path:@"/api/upload-avatar" parameters:params success:^(RKObjectRequestOperation *operation, RKMappingResult *mappingResult) { 
    NSLog(@"%@", mappingResult.array); 

    for (UpdateAvatar *obj in mappingResult.array) { 

     NSLog(@"MESSAGE: %@", obj.message); 

     [[DataManager sharedManager] setMessage:obj.message]; 

    } 

    [SVProgressHUD showSuccessWithStatus:@"Profile Picture Updated"]; 
    //[[NSNotificationCenter defaultCenter] postNotificationName:@"didRegistered" object:nil]; 
} failure:^(RKObjectRequestOperation *operation, NSError *error) { 
    NSLog(@"%@", error); 
}]; 
+0

Как сервер рассчитывает получить данные изображения точно? – Wain

+0

@Wain Спасибо :) решил. написал мой ответ ниже :) – Anton

ответ

4

Я решил проблему с документацией непосредственно из RESTKit. Возможно, это поможет кому-то еще:

NSData *data = UIImageJPEGRepresentation(imageData, 0.3); 

RKObjectMapping* objectMapping = [RKObjectMapping mappingForClass:[UpdateAvatar class]]; 
[objectMapping addAttributeMappingsFromDictionary:@{ 
                @"message" : @"message" 
                }]; 

NSIndexSet *successStatusCodes = RKStatusCodeIndexSetForClass(RKStatusCodeClassSuccessful); 

RKResponseDescriptor *responseDescriptor = [RKResponseDescriptor responseDescriptorWithMapping:objectMapping 
                         method:RKRequestMethodPOST 
                        pathPattern:nil 
                         keyPath:nil 
                        statusCodes:successStatusCodes]; 

RKObjectManager *objectManager = [RKObjectManager managerWithBaseURL:[DataManager defineBaseUrl]]; 
[[objectManager HTTPClient] setDefaultHeader:@"device_uid" value:[self getDeviceUid]]; 
[objectManager addResponseDescriptor:responseDescriptor]; 

NSMutableURLRequest *request = [[RKObjectManager sharedManager] multipartFormRequestWithObject:nil method:RKRequestMethodPOST path:@"/api/upload-avatar" parameters:nil constructingBodyWithBlock:^(id<AFMultipartFormData> formData) { 
    [formData appendPartWithFileData:data 
           name:@"avatar" 
          fileName:@"image.jpeg" 
          mimeType:@"image/jpeg"]; 
}]; 

RKObjectRequestOperation *operation = [objectManager objectRequestOperationWithRequest:request success:^(RKObjectRequestOperation *operation, RKMappingResult *mappingResult) { 

    for (UpdateAvatar *obj in mappingResult.array) { 

     [SVProgressHUD setBackgroundColor:[UIColor colorWithRed:0.31 green:0.31 blue:0.31 alpha:0.5]]; 
     [SVProgressHUD setRingThickness:2]; 
     [SVProgressHUD setForegroundColor:[UIColor whiteColor]]; 
     [SVProgressHUD showSuccessWithStatus:[NSString stringWithFormat:@"Uploading avatar\n %@", obj.message]]; 
    } 


} failure:^(RKObjectRequestOperation *operation, NSError *error) { 
    NSLog(@"Failure"); 
}]; 

[[RKObjectManager sharedManager] enqueueObjectRequestOperation:operation]; 
Смежные вопросы