Vấn đề
Tôi đã cố gắng đăng lên máy chủ với yêu cầu đa dạng bao gồm tệp đính kèm hình ảnh. Tôi chưa gặp sự cố khi tải hình ảnh lên máy chủ, đó là thông tin khác không gửi đúng.Restkit MultiForm Đăng với một hình ảnh
Chi tiết
Tôi đang sử dụng bản đồ đối tượng để cấu hình các thuộc tính khác nhau khi nhận được các đối tượng từ các máy chủ:
//Using a custom class to map object I receive to
RKObjectMapping * memoryMapper = [RKObjectMapping mappingForClass:[MemoContent class]];
[memoryMapper mapAttributes:@"created", @"user", @"participants", @"tags", @"text", @"kind", @"video", @"location", nil];
[memoryMapper mapKeyPath:@"_id" toAttribute:@"memoryID"];
//MediaMapper handles the data needed for the Image attachments
RKObjectMapping * mediaMapper = [RKObjectMapping mappingForClass:[MemoMedia class]];
[mediaMapper mapKeyPath:@"processed" toAttribute:@"processed"];
[mediaMapper mapKeyPath:@"original" toAttribute:@"original"];
[mediaMapper mapKeyPath:@"mime" toAttribute:@"mimeType"];
[memoryMapper mapKeyPath:@"media" toRelationship:@"rawMedia" withMapping:mediaMapper];
//
[[RKObjectManager sharedManager].mappingProvider setMapping:memoryMapper forKeyPath:@"memories"];
[RKObjectManager sharedManager].serializationMIMEType = RKMIMETypeFormURLEncoded;
[RKObjectManager sharedManager].acceptMIMEType = RKMIMETypeJSON;
Sau đó, khi nói đến thời gian để gửi một bức ảnh tôi cập nhật cấu hình như sau:
RKObjectMapping * memoryMapper = [RKObjectMapping mappingForClass:[MemoContent class]];
[memoryMapper mapAttributes:@"created", @"participants", nil];
[[RKObjectManager sharedManager].mappingProvider setSerializationMapping:memoryMapper forClass:[MemoContent class]];
[[RKObjectManager sharedManager].mappingProvider setMapping:memoryMapper forKeyPath:@"memory"];
Những người tham gia là những người được gắn thẻ với ảnh. Đây là cách tôi gửi bài nó, tương tự như sau https://github.com/RestKit/RestKit/wiki/Attach-a-File-to-an-RKObjectLoader
[[RKObjectManager sharedManager] postObject:theMemory usingBlock:^(RKObjectLoader * loader){
RKObjectMapping* serializationMapping = [[[RKObjectManager sharedManager] mappingProvider] serializationMappingForClass:[MemoContent class]];
NSLog(@"serializationMapping: %@", serializationMapping);
loader.delegate = APP; //main app delegate posting, updating
NSError* error = nil;
RKObjectSerializer * serializer = [[RKObjectSerializer alloc] initWithObject:theMemory mapping:serializationMapping];
NSDictionary * dictionary = [serializer serializedObject:&error];
RKParams * params = [RKParams paramsWithDictionary:dictionary];
NSData * imageData = UIImagePNGRepresentation(theMemory.photo); //image data
[params setData:imageData MIMEType:@"image/png" forParam:@"attachment"];
loader.params = params;
loader.serializationMIMEType = RKMIMETypeFormURLEncoded;
}];
Các máy chủ đang nhận được hình ảnh như kế hoạch, và thực sự không nhận được 'tạo ra' và 'tham gia' rất tiếc là trong một định dạng lạ mà máy chủ không hiểu. Nó bao gồm ngắt dòng và như vậy participants (\n 19843589323 \n created: \n 3-31-2012 00:00
(một cái gì đó như thế, tôi sẽ cập nhật khi tôi có quyền truy cập vào các bản ghi.
Tôi sẽ cung cấp cho bạn thêm bất kỳ thông tin nào bạn cần.)
bạn có nghĩa là một POST với Content-type 'multipar t/form-data'? Bạn có khăng khăng sử dụng RestKit cho việc này không? – leo
Tôi thích gắn bó với Restkit hơn, và tôi tin rằng dữ liệu đa dạng/biểu mẫu là đúng .. nhưng bạn có thể xây dựng được không? –
Không thể giúp bạn với RestKit, nhưng nếu nó không phải là một yêu cầu, nhiều giải pháp khác có sẵn. Sáng nay, tôi đặt một câu chuyện trực tuyến để chơi với nhiều phần/biểu mẫu dữ liệu, có giao diện [https://gist.github.com/3786554](https://gist.github.com/3786554) – leo