Problema
He intentado publicar en el servidor con una solicitud multiforme que incluye una imagen adjunta. No he tenido problemas para obtener la imagen en el servidor, es la otra información que no se envía correctamente.Restkit MultiForm Publicar con una imagen
detalles
estoy usando mapeo objeto de configurar varios atributos distintos al recibir objetos desde el servidor:
//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;
Luego, cuando llega el momento de publicar una foto que actualizar las configuraciones de la siguiente manera:
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"];
Los participantes son las personas etiquetadas con la foto. Así es como he publicado, similar a este 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;
}];
El servidor recibe la imagen tal como estaba previsto, y en realidad no reciben la 'creados' y 'participantes' Por desgracia, es en un formato extraño que el servidor no entiende Incluye saltos de línea y tal participants (\n 19843589323 \n created: \n 3-31-2012 00:00
(algo así, lo actualizaré cuando tenga acceso a los registros.
Le daré toda la información adicional que necesite. Ofrecería reputación si tuviera suficiente para hacerlo;)
qué quiere decir un post con contenido de tipo 'multipar t/form-data'? ¿Insiste en usar RestKit para esto? – leo
Preferiría quedarme con Restkit, y creo que un multipart/form-data es correcto ... ¿pero podría dar más detalles? –
No se puede ayudar con RestKit, pero si no es un requisito, hay muchas otras soluciones disponibles. Esta mañana puse un gist en línea para jugar con multipart/form-data, eche un vistazo [https://gist.github.com/3786554](https://gist.github.com/3786554) – leo