ios - iOS 无法在移动数据/4G 网络上上传图像,而在 Wifi 中它工作正常
问题描述
我正在使用 NSURLSesssion 上传任务将图像上传到服务器,以字节发送。它在 wifi 中工作正常。但是当我使用 MobileData/4G LTE 网络上传时,它显示 -1001 错误代码。1.增加服务器端超时至4分钟。2.尝试使用小 kb 大小的图像仍然存在仅在 4GLTE 网络上的问题。
注意:相同的服务 API 在 Andriod 中工作。
请让我知道会是什么问题。?
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"];
[NSURLRequest allowsAnyHTTPSCertificateForHost:@“yyyy.abc.com"];
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];
}
解决方案
推荐阅读
- node.js - Aws Rekognition - 按图像搜索人脸最多返回一个匹配项
- javascript - 未处理的拒绝(TypeError):无法读取未定义的属性“地图”......无法获取所有帖子
- flutter - 如何在flutter web上加载网络图片?
- python - 从二进制 2D 数字表面数据自动检测建筑物间隔和道路
- reactjs - useQuery 不会在重新渲染时触发
- ios - 如何处理输入字段上的 Safari iOS 缩放
- python - 使用 CVXPY 的解决方案不一致
- python - 拆分多个分隔符但忽略电子邮件、小数和 URL
- apache-kafka - Kafka消费者从主题开头读取时重新启动
- python - 我可以使用另一个 pandas 数据帧(来自 csv 文件)循环通过不同的行来更改 pd 数据帧中的列吗