ios - 后台上传任务

标签 ios objective-c ios7 nsurlsession nsurlsessionuploadtask

从上周开始我就一直卡在这个问题上。但是我没有得到解决方案。

我想访问相机胶卷中的所有照片,并想在 NSURLSessionUploadTask 的帮助下将所有照片保存在远程服务器上。为此,我使用以下代码:

 NSString *boundary = @"----WebKitFormBoundarycC4YiaUFwM44F6rT";
NSMutableData *body = [NSMutableData data];
[body appendData:[[NSString stringWithFormat:@"--%@\r\n", boundary] dataUsingEncoding:NSUTF8StringEncoding]];
[body appendData:[[NSString stringWithFormat:@"Content-Disposition: form-data; name=\"%@\"; filename=\"%@.jpeg\"\r\n", @"upload",self.pictureName] dataUsingEncoding:NSUTF8StringEncoding]];
[body appendData:[@"Content-Type: image/jpeg\r\n\r\n" dataUsingEncoding:NSUTF8StringEncoding]];
[body appendData:self.imageData];
[body appendData:[[NSString stringWithFormat:@"\r\n"] dataUsingEncoding:NSUTF8StringEncoding]];
[body appendData:[[NSString stringWithFormat:@"--%@--\r\n", boundary] dataUsingEncoding:NSUTF8StringEncoding]];

NSURLSessionConfiguration *config = [NSURLSessionConfiguration defaultSessionConfiguration];
config.HTTPMaximumConnectionsPerHost = 1;
config.HTTPAdditionalHeaders = @{
                                 @"api-key"       : @"55e76dc4bbae25b066cb",
                                 @"Accept"        : @"application/json",
                                 @"Content-Type"  : [NSString stringWithFormat:@"multipart/form-data; boundary=%@", boundary]
                                 };
NSURLSession *upLoadSession = [NSURLSession sessionWithConfiguration:config delegate:self delegateQueue:nil];
NSURL *url = self.uploadURL;
NSLog(@"URL=%@",url);
NSMutableURLRequest *request = [[NSMutableURLRequest alloc] initWithURL:url];
[request setHTTPMethod:@"PUT"];
[request setHTTPBody:body];

// 3

self.uploadTask = [upLoadSession uploadTaskWithRequest:request fromData:nil];
// self.uploadTask = [upLoadSession uploadTaskWithRequest:request fromFile:tmpFileUrl];
[[UIApplication sharedApplication] setNetworkActivityIndicatorVisible:YES];

// 5
[_uploadTask resume];

前台一切正常。但是当我进入后台时,它停止工作。哪里有问题? 使用 NSURLSessionUploadTask 在后台上传图片需要做什么?

最佳答案

您的 session 配置未指定在后台运行。

NSURLSessionConfiguration *config = [NSURLSessionConfiguration backgroundSessionConfiguration:@"com.test.backgroundSession"];

NSURLSession *upLoadSession = [NSURLSession sessionWithConfiguration:config delegate:self delegateQueue:nil];

如上实现。

关于ios - 后台上传任务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25640574/

相关文章:

ios - 将 Tiled 层导出到 1 个大 png 文件以节省内存是否明智?

ios - 更新 Firebase Messaging 时出现“架构 x86_64 的重复符号”

ios - 在第 4 代 iPad 上缩放图像很慢,是否有更快的替代方案?

ios - 如何在特定时间后在 ios 中隐藏 UICollectionView Cell。例如。半小时,7周等

ios - 使用 AVCaptureDevice 读取条形码,我想在扫描后立即显示动画 ActivityIndi​​cator

ios - 应用程序可以请求打开飞行模式然后检测用户是否已这样做?

ios - 安装旧版本的 Apple 应用程序

ios - UILabel 自动布局 - 先水平拉伸(stretch)然后垂直拉伸(stretch)

ios - iOS 中的动态 Xml 解析

ios - 在应用程序购买观察者中恢复调用 addPayment 而不是恢复