我使用下面的代码将文件发送到服务器:
NSString *urlString = [NSString stringWithFormat:@"%@%@",[LIUtility sharedUtility].uploadConnectionURL,BR_SERVER_UPLOAD_ADDRESS_FILE];
self.request =[[NSMutableURLRequest alloc] init];
[self.request setURL:[NSURL URLWithString:urlString]];
[self.request setHTTPMethod:@"POST"];
PKMultipartInputStream *body = [[PKMultipartInputStream alloc] init];
NSString *requestString =[self getRequestStringForRange:range andExtension:fileName];
NSData *requestData = [requestString dataUsingEncoding:NSUTF8StringEncoding];
NSString *jsonLengthString = [NSString stringWithFormat:@"%04lu",(unsigned long)requestData.length];
NSData *jsonLengthData = [jsonLengthString dataUsingEncoding:NSUTF8StringEncoding];
[body addPartWithName:@"jsonLength" data:jsonLengthData];
[body addPartWithName:@"json" data:requestData];
[body addPartWithName:@"separator" string:@"\r\n"];
[body addPartWithName:@"fileData" filename:fileName stream:dataStream streamLength:streamSize];
[self.request setHTTPBodyStream:body];
[self.request setTimeoutInterval:60];
NSString *contentType = LI_CONNECTION_CONTENTTYPE;
[self.request addValue:contentType forHTTPHeaderField: @"Content-Type"];
self.connection = [[NSURLConnection alloc] initWithRequest:self.request delegate:self];
_responseData = [NSMutableData data];
[self.connection start];
该文件正在使用3G / 4G上传。当设备连接到某些ADSL ISP的wifi时,代码也可以工作,但在其他一些ISP中,代码不起作用,我得到以下错误:
错误域= NSURLErrorDomain代码= -1001“请求超时。” UserInfo = {NSErrorFailingURLStringKey = http://example.net,_ kCFStreamErrorCodeKey = -2102,NSErrorFailingURLKey = http:/example.net:80 / au,NSLocalizedDescription =请求超时。,_ kCFStreamErrorDomainKey = 4,NSUnderlyingError = 0x16a40410 {错误域= kCFErrorDomainCFNetwork代码= -1001“请求超时。” UserInfo = {_ kCFStreamErrorCodeKey = -2102,NSErrorFailingURLStringKey = http://example.net,NSErrorFailingURLKey = http://example.net,NSLocalizedDescription =请求超时。,_ kCFStreamErrorDomainKey = 4}}}
有没有人知道这是什么问题?
答案 0 :(得分:6)
我最终通过在请求中添加Content-Length
解决了我的问题。
如果我们不在请求中添加Content-Length
标头,NSURLConnection
会将其作为chunked
请求发送,看起来这些问题在分块请求中很常见。
实际上我没有找到这个chunked
请求问题的根本原因(我在网上搜索了很多主题,阅读了很多文章,与其他几个程序员交谈,但没有找到任何根本原因,所以我决定使用其他解决方案)但我为可以在其业务中使用非分块请求的人共享此解决方案。据我所知,大多数分块请求的用法都是实时流,我们不知道Content-Length
所以如果你可以添加Content-Length
,我建议用它来避免像这样的分块问题。
答案 1 :(得分:0)
如果您运行的是企业版应用程序,请与您的服务器管理员联系,以查看您的Cert是否是最新的并且与您的防火墙服务器兼容。我的不是。
答案 2 :(得分:-1)
我刚刚解决了这个问题...
我希望如果您在互联网上找不到解决方案,这可以帮助您,因为这是一种个人体验。
我已经配置了所有HTTP头,所有参数并检查了Objective-C上的所有编程,但我忘了检查服务器端,我的架构包括3个组件:应用程序,REST服务器和文件服务器,文件服务器与域名存在网络问题,这是因为应用程序无法正常工作,在解决了问题之后才能完美运行。