Problema
Ho cercato di inviare al server con una richiesta multiform che include un allegato immagine. Non ho avuto problemi a ottenere l'immagine sul server, sono le altre informazioni che non vengono inviate correttamente.Post MultiForm Restkit con un'immagine
dettagli
sto usando la mappatura oggetto di configurare diversi attributi diversi quando si ricevono gli oggetti dal server:
//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;
Poi, quando arriva il momento di pubblicare una foto aggiorno configurazioni come segue:
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"];
I partecipanti sono persone taggate con la foto. Ecco come sto postando esso, simile a questo 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;
}];
Il server sta ricevendo l'immagine come previsto, e in realtà non ricevere il 'create' e 'partecipanti' Purtroppo è in un formato strano che il server non capisce Comprende interruzioni di riga e tali participants (\n 19843589323 \n created: \n 3-31-2012 00:00
(qualcosa di simile, aggiornerò quando avrò accesso ai registri.
Ti fornirò ogni informazione in più che ti serve.Offrirei la reputazione se ne avessi abbastanza da farlo;)
cosa si intende un post con Content-type 'multipar t/form-data'? Insisti a utilizzare RestKit per questo? – leo
Preferirei restare con il Restkit, e credo che un multipart/form-data abbia ragione ... ma potresti elaborarlo? –
Non posso aiutarti con RestKit, ma se non è un requisito, sono disponibili molte altre soluzioni. Stamattina ho messo un sommario online per giocare con multipart/form-data, dare un'occhiata [https://gist.github.com/3786554](https://gist.github.com/3786554) – leo