Domain = NSURLErrorDomain Code = -1021“请求正文流已耗尽”
我收到NSURLErrorDomain Code = -1021“请求正文流已用尽”
NSLocalizedDescription =请求正文流耗尽,NSUnderlyingError = 0x2088c080“请求正文流耗尽”}
上传多个大尺寸图像时出现此错误我正在使用AFNetworking并尝试在线搜索修复但未成功
NSDictionary *clientUniqueId = [NSDictionary dictionaryWithObject:NSLocalizedString(uniqueDrId, nil) forKey:@"clientUniqueId"]; NSMutableURLRequest *request = [client multipartFormRequestWithMethod:@"POST" path:pendingUpload.urlPath parameters:clientUniqueId constructingBodyWithBlock:^(id 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]; } } }];
如AFNetworking FAQ中所述 :
为什么某些上传请求失败并显示错误“请求正文流已耗尽”? 这是什么意思,我该如何解决这个问题?
通过3G或EDGE连接上传时,请求可能会因“请求正文流耗尽”而失败。 使用
-throttleBandwidthWithPacketSize:delay:
您的多部分表单构造块,您可以根据建议值(kAFUploadStream3GSuggestedPacketSize
和kAFUploadStream3GSuggestedDelay
)设置最大数据包大小和延迟。 这降低了输入流超过其分配带宽的风险。 不幸的是,从iOS 6开始,没有明确的方法可以区分3G,EDGE或LTE连接。 因此,建议您不要仅根据网络可达性来限制带宽。 相反,您应该考虑在故障块中检查“请求正文流已耗尽”,然后使用限制带宽重试请求。
我也遇到了这个问题,并且没有使用throttleBandwithWithPacketSize
方法。 我相信在我的情况下,这是一个身份validation挑战问题。
我最终做的是切换到AFNetworking 2.0中的URLSession连接方法,这似乎解决了它。 这是我最终使用的代码:
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 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); }];
- MAILTO链接电子邮件,以开始一个新的电子邮件
- CLLocationManager startMonitoringForRegion:设备重启后不重新启动应用程序
- 在SceneKit中使用着色器修改器对纹理进行animation处理会导致长时间的抖动纹理
- 打开项目EXC_CRASH(SIGABRT)和EXC_CORPSE_NOTIFY时XCode 8崩溃
- 用Swift实现UITextFieldDelegate
- 如何“在谷歌地图上显示我当前的位置,当我打开ViewController?”在Swift?
- LinkedIn移动访问令牌,用于进行服务器端REST API调用
- Phasset + AfNetworking上传多个video
- IOS 8资产目录图像大小令人困惑