Problem
Próbowałem wysłać do serwera z prośbą wielopostaciową, która zawiera załącznik obrazu. Nie miałem problemu z uzyskaniem obrazu na serwer, to inne informacje, które nie są wysyłane poprawnie.Post Office MultiForm Post z obrazem
Szczegóły
Używam odwzorowania obiektu, aby skonfigurować kilka różnych atrybutów podczas odbierania przedmiotów z serwera:
//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;
Potem, gdy przychodzi czas, aby opublikować zdjęcie zaktualizować konfiguracje, co następuje:
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"];
Uczestnikami są ludzie otagowani zdjęciem. Oto jak ja umieszczenie go, podobny do tego 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;
}];
Serwer odbiera obraz zgodnie z planem, a faktycznie ma otrzymać „stworzył” i „uczestnicy” niestety jest w dziwnym formacie, że serwer nie rozumie. Obejmuje ona podziały wiersza i taki participants (\n 19843589323 \n created: \n 3-31-2012 00:00
(coś takiego, będę aktualizował gdy mam dostęp do dzienników
dam ci żadnych dodatkowych informacji trzeba będzie oferować reputacji za to, gdybym miał na tyle, aby to zrobić..;)
Czy chodziło Ci o stanowisko z Content-Type 'multipar t/form-data'? Czy nalegasz na używanie RestKit do tego? – leo
Wolałbym trzymać się Restkita, i wierzę, że wieloczęściowe/dane formularza są słuszne .. ale czy mógłbyś je rozwinąć? –
Nie można pomóc w programie RestKit, ale jeśli nie jest to wymagane, dostępnych jest wiele innych rozwiązań. Dziś rano postawiłem online na grę z wieloczęściowymi/formularzowymi danymi, zajrzyj [https://gist.github.com/3786554](https://gist.github.com/3786554) – leo