Dominio = NSURLErrorDomain Code = -1021 "flujo de cuerpo de request agotado"

Obtengo el código NSURLErrorDomain = -1021 "flujo de la request de cuerpo agotado"

NSLocalizedDescription = flujo de cuerpo de request agotado, NSUnderlyingError = 0x2088c080 "flujo de cuerpo de request agotado"}

Este error se genera al cargar varias imágenes de gran tamaño. Utilizo AFNetworking e intenté search una solución en línea, pero no tuve éxito

NSDictionary *clientUniqueId = [NSDictionary dictionaryWithObject:NSLocalizedString(uniqueDrId, nil) forKey:@"clientUniqueId"]; NSMutableURLRequest *request = [client multipartFormRequestWithMethod:@"POST" path:pendingUpload.urlPath parameters:clientUniqueId constructingBodyWithBlock:^(id<AFMultipartFormData> formData) { [formData appendPartWithFormData:[pendingUpload dataRecordData] name:@"dr"]; NSArray *attachments = pendingUpload.attachments; if (attachments != nil) { for (Attachment *attachment in attachments) { [formData appendPartWithFileData:attachment.data name:attachment.key fileName:attachment.filename mimeType:attachment.contentType]; } } }]; 

Como se describe en las preguntas frecuentes de AFNetworking :

¿Por qué algunas requestes de carga fallan con el error "solicitar flujo de cuerpo agotado"? ¿Qué significa eso y cómo soluciono esto?

Cuando se carga a través de una connection 3G o EDGE, las requestes pueden fallar con "flujo de request de cuerpo agotado". Usando -throttleBandwidthWithPacketSize:delay: su bloque de construcción de formularios multiparte, puede establecer un tamaño de package máximo y un retardo de acuerdo con los valores recomendados ( kAFUploadStream3GSuggestedPacketSize y kAFUploadStream3GSuggestedDelay ). Esto networkinguce el riesgo de que el flujo de input exceda su ancho de banda asignado. Desafortunadamente, a partir de iOS 6, no hay una forma definida de distinguir entre una connection 3G, EDGE o LTE. Como tal, no se recomienda acelerar el ancho de banda basado únicamente en la accesibilidad de la networking. En su lugar, debería considerar la búsqueda del "flujo de cuerpo de request agotado" en un bloque de fallas y luego volver a intentar la request con ancho de banda networkingucido.

También estaba experimentando este problema y no tuve suerte con el método throttleBandwithWithPacketSize . Creo que en mi caso fue un problema de authentication.

Lo que finalmente hice fue cambiar al método de connection URLSession en AFNetworking 2.0 y eso pareció solucionarlo para mí. Aquí está el código que terminé usando:

  NSString *uploadAttachmentURL = @"https://mydomain.zendesk.com/api/v2/uploads.json?filename=screenshot.jpeg"; NSData *imageData = UIImageJPEGRepresentation(image, 1.0); NSURLSessionConfiguration *configuration = [NSURLSessionConfiguration defaultSessionConfiguration]; _afHTTPSessionManager = [[AFHTTPSessionManager alloc] initWithSessionConfiguration:configuration]; // hack to allow 'text/plain' content-type to work NSMutableSet *contentTypes = [NSMutableSet setWithSet:_AFOpManager.responseSerializer.acceptableContentTypes]; [contentTypes addObject:@"text/plain"]; _afHTTPSessionManager.responseSerializer.acceptableContentTypes = contentTypes; [_afHTTPSessionManager.requestSerializer setAuthorizationHeaderFieldWithUsername:@"[USERNAME]" password:@"[PASSWORD]"]; [_afHTTPSessionManager POST:uploadAttachmentURL parameters:nil constructingBodyWithBlock:^(id<AFMultipartFormData> formData) { [formData appendPartWithFileData:imageData name:@"screenshot" fileName:@"photo.jpg" mimeType:@"image/jpeg"]; } success:^(NSURLSessionDataTask *task, id responseObject) { DDLogError(@"screenshot operation success! %@", responseObject); } failure:^(NSURLSessionDataTask *task, NSError *error) { DDLogError(@"Operation Error: %@", error); }];