AFnetworking 2.2.0 cargar imágenes en los problemas del server

La razón por la cual pedirle que lo haga es porque confundo sobre params.

Como entendí allí una forma de cómo hacerlo mediante la request de múltiples partes.

De esta manera, nos ofrece dos conceptos, ya que comprendí que se cargan desde un file que se puede almacenar en el directory de documentos o utilizando el object NSData.

Cargar desde el file:

Así que he guardado test.jpg en el directory de documentos. Luego hago la instancia NSURL para usarla en la request de múltiples partes. El código siguiente muestra cómo creo la instancia de NSURL:

NSString *fileName = @"test.jpg"; NSString *folderPath = [documentsDirectory stringByAppendingPathComponent:fileName]; NSURL *filePath = [NSURL fileURLWithPath:folderPath]; 

Cuando imprimo la ruta del file:

 file:///Users/mac/Library/Application%20Support/iPhone%20Simulator/7.0.3/Applications/F732FCF6-EAEE-4E81-A88B-76ADB75EDFD1/Documents/test.jpg 

Luego, establezco mis parameters y uso formData para adjuntar mi file de la siguiente manera:

 AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager]; NSDictionary *parameters = @{@"foo": @"bar"}; NSURL *filePath = [NSURL fileURLWithPath:@"file://path/to/image.png"]; [manager POST:@"http://example.com/resources.json" parameters:parameters constructingBodyWithBlock:^(id<AFMultipartFormData> formData) { [formData appendPartWithFileURL:filePath name:@"image" error:nil]; } success:^(AFHTTPRequestOperation *operation, id responseObject) { NSLog(@"Success: %@", responseObject); } failure:^(AFHTTPRequestOperation *operation, NSError *error) { NSLog(@"Error: %@", error); }]; 

¿Es esto correcto? o tal vez extraño algo porque la respuesta no es exitosa?

El segundo concepto: trabaja directamente con los datos:

 [formData appendPartWithFileData:imageData name:@"image" fileName:@"test.jpg" mimeType:@"image/jpeg"]; 

pero cuando la aplicación invoca esta línea de código obtuve el error:

 *** Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'Invalid parameter not satisfying: body' 

La razón por la que supongo que imageData definido fuera del bloque de administrador es nil en esta línea. Entonces necesito ayuda aquí también cómo pasarla al bloque.

¿Me puedes corregir lo que está mal en mis pasos tal vez extraño algo?

También cuando comento la línea

 [formData appendPartWithFileData:imageData name:@"image" fileName:@"test.jpg" mimeType:@"image/jpeg"]; 

o

 [formData appendPartWithFileURL:filePath name:@"image" error:nil]; 

entonces todo funciona bien y obtengo una respuesta de éxito en la repetición.

¿Has confirmado que el file se encuentra en esa location en tu carpeta de Documentos? También estoy teniendo problemas para reconciliar su ruta de file determinada por progtwig (que es correcta) con su ruta de file literal de cadena (que puede ser problemático). Siempre debe progtwigr la ruta, no usar literales de cadena (porque cuando vuelva a instalar la aplicación, esa ruta cambiará). Lo que creo que necesitas es algo como:

 AFHTTPRequestOperationManager *manager = [AFHTTPRequestOperationManager manager]; NSDictionary *parameters = @{@"foo": @"bar"}; NSString *documentsPath = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES)[0]; NSString *filePath = [documentsPath stringByAppendingPathComponent:@"image.png"]; NSURL *fileURL = [NSURL fileURLWithPath:filePath]; [manager POST:@"http://example.com/resources.json" parameters:parameters constructingBodyWithBlock:^(id<AFMultipartFormData> formData) { NSError *error; BOOL success = [formData appendPartWithFileURL:fileURL name:@"image" fileName:filePath mimeType:@"image/png" error:&error]; if (!success) NSLog(@"appendPartWithFileURL error: %@", error); } success:^(AFHTTPRequestOperation *operation, id responseObject) { NSLog(@"Success: %@", responseObject); } failure:^(AFHTTPRequestOperation *operation, NSError *error) { NSLog(@"Error: %@", error); }]; 

Tenga en count que esto determina mediante progtwigción el file path (que es una ruta, no una URL) y luego usa fileURLWithPath para convertirlo en una URL de file. También confirma si fue exitoso o no, registrándose el error si no es exitoso.

También tenga en count que esto supone que su server devuelve su respuesta como JSON. De lo contrario, tendría que cambiar el responseSerializer .