2015-04-04 54 views
2

我想发布图像到我的服务器使用RestKit和地图响应从服务器。但服务器总是支持我发送的文件是零。 任何人都可以帮我解决这个问题吗?ios RestKit后附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 2015-04-06 14:05:48

+0

@谢谢:)解决了它。张贴我的答案:) – Anton 2015-04-06 15:35:45

回答

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