首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >iOS无法在移动数据/4G网络上将图像上传到服务器,而在Wifi中,它工作得很好

问iOS无法在移动数据/4G网络上将图像上传到服务器,而在Wifi中,它工作得很好
EN

Stack Overflow用户
提问于 2018-07-31 10:24:30
回答 1查看 122关注 0票数 0

我使用NSURLSesssion上传任务将图片上传到服务器,发送字节。它在wifi中运行良好,但当我使用MobileData/4G LTE网络上传时,它显示了-1001错误代码。

我试过:

  1. 服务器端超时时间增加到4分钟。
  2. 尝试用小kb大小的图像。

不过,这个问题只存在于4G LTE网络上。

注意:相同的服务API在Android中工作。

请让我知道有什么问题吗?

代码语言:javascript
复制
NSMutableURLRequest * request = [[NSMutableURLRequest alloc] init];
NSString *boundary = @"---------------------------14737809831466499882746641449";
[request setCachePolicy:cachePolicy];
[self prepareMethod:methodURL methodType:methodType dataInBody:dataInBody contentType:contentType withRequest:request];
[request setValue:[NSString stringWithFormat:@"multipart/form-data; boundary=%@", boundary] forHTTPHeaderField:@"Content-Type"];


NSMutableData * bodyData = [[NSMutableData alloc] init];

params = [[[NSUserDefaults standardUserDefaults]objectForKey:@"userparams"]mutableCopy];

for (NSString *param in params)
{
    if (![param isEqualToString:@"file"]) {
        [bodyData appendData:[[NSString stringWithFormat:@"--%@\r\n", boundary] dataUsingEncoding:NSUTF8StringEncoding]];
        [bodyData appendData:[[NSString stringWithFormat:@"Content-Disposition: form-data; name=\"%@\"\r\n\r\n", param] dataUsingEncoding:NSUTF8StringEncoding]];
        [bodyData appendData:[[NSString stringWithFormat:@"%@\r\n", [params objectForKey:param]] dataUsingEncoding:NSUTF8StringEncoding]];
    }
}

// add image data
[bodyData appendData:[[NSString stringWithFormat:@"--%@\r\n", boundary] dataUsingEncoding:NSUTF8StringEncoding]];
[bodyData appendData:[[NSString stringWithFormat:@"Content-Disposition: form-data; name=\"%@\"; filename=\"image.jpeg\"\r\n", @"file"] dataUsingEncoding:NSUTF8StringEncoding]];
[bodyData appendData:[@"Content-Type: image/jpeg\r\n\r\n" dataUsingEncoding:NSUTF8StringEncoding]];
[bodyData appendData:[params objectForKey:@"file"]];
[bodyData appendData:[[NSString stringWithFormat:@"\r\n"] dataUsingEncoding:NSUTF8StringEncoding]];
[bodyData appendData:[[NSString stringWithFormat:@"--%@--\r\n", boundary] dataUsingEncoding:NSUTF8StringEncoding]];


//NSURLSessionConfiguration *sessionConfiguration = [NSURLSessionConfiguration defaultSessionConfiguration];
// sessionConfiguration.timeoutIntervalForRequest = 120.0;
NSURLSession *session = [NSURLSession sharedSession];

NSURLSessionUploadTask* uploadtask = [session uploadTaskWithRequest:request fromData:bodyData completionHandler:^(NSData *data, NSURLResponse *response, NSError *error){

  if (!error)
  {
      NSHTTPURLResponse *httpResponse = (NSHTTPURLResponse*)response;
      HttpResponse * response = [[HttpResponse alloc] initWithHttpURLResponse:httpResponse withData:data];

      dispatch_async(dispatch_get_main_queue(), ^{
          if ([delegate respondsToSelector:@selector(connectionFinishedLoading:)]) {
              [delegate connectionFinishedLoading:response];
          }
      });

  }
  else
  {
      dispatch_async(dispatch_get_main_queue(), ^{
          if ([delegate respondsToSelector:@selector(connectionFailedWithError:)])
          {
              [delegate connectionFailedWithError:error];
          }
      });
  }


}];
[uploadtask resume];
EN

回答 1

Stack Overflow用户

发布于 2018-08-06 18:08:19

1001是超时。这可能意味着您的蜂窝连接很糟糕,或者您的测试主机无法从蜂窝网络访问。

也就是说,你还在使用前台会话(默认会话)上传大量数据,一旦你的应用程序被备份或手机关闭以节省电源,这个连接就会被取消。您几乎肯定应该使用您创建的后台会话。这样,你的上传就不会被取消。

另外,在蜂窝上上传大型文件通常是个坏主意,因为HTTP规范不支持在网络故障时恢复上传。如果一个文件平均上传时间超过5秒,您应该对服务器端进行更改,以便您可以将该文件上传成多个块,然后重新组装它。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51611151

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档