2014-09-03 93 views
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在後臺上傳圖片需要做些什麼?

回答

1

您的會話配置未指定在後臺運行。

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

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

如上實現。

+0

好吧讓我試試這個 – Rox 2014-09-03 09:45:49

+0

現在它已停止上傳圖像在服務器上 – Rox 2014-09-03 10:17:00

+0

+ backgroundSessionConfiguration:是唯一的,因爲它創建一個後臺會話。後臺會話與普通的常規會話有所不同,因爲他們可以運行上載和下載任務,即使應用程序被掛起,退出或崩潰時也是如此。初始化過程中指定的標識符用於爲任何可能恢復後臺傳輸的守護進程提供上下文。 – Woodstock 2014-09-03 10:21:32

0

上傳任務在後臺工作,你必須使用uploadTaskWithRequest:fromFile:,而不是uploadTaskWithRequest:fromData:

如果您使用的NSData提供的文件,它會同時應用處於活動狀態工作,將停止一旦應用程序在後臺。