0

从上周开始,我一直被困在这个问题上。但我没有得到解决方案。

我想访问相机胶卷中的所有照片,并希望借助 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 在后台上传图片需要做什么?

4

2 回答 2

1

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

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

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

执行如上。

于 2014-09-03T09:39:44.753 回答
1

要让上传任务在后台工作,您必须使用uploadTaskWithRequest:fromFile:而不是uploadTaskWithRequest:fromData:

如果您使用 NSData 来提供文件,它将在应用程序处于活动状态时工作,并在应用程序处于后台时停止。

于 2017-06-06T07:38:15.110 回答