2014-09-03 4 views
0

J'ai été coincé dans ceci de la semaine dernière. Mais je n'ai pas eu la solution. Je veux accéder à toutes les photos de la pellicule et je veux enregistrer toutes les photos sur le serveur distant avec l'aide de NSURLSessionUploadTask. Pour cela j'utilise le code suivant:Tâche de téléchargement d'arrière-plan

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]; 

Tout fonctionne bien au premier plan. Mais quand j'entre en arrière-plan, ça arrête de fonctionner. Où est le problème? Qu'est-ce que je vais devoir faire pour télécharger des images en arrière-plan en utilisant NSURLSessionUploadTask?

Répondre

1

Votre configuration de session n'est pas spécifiée pour s'exécuter en arrière-plan.

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

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

Mettre en œuvre comme ci-dessus.

+0

ok laissez-moi essayer ceci – Rox

+0

maintenant Il a cessé de télécharger des images sur le serveur – Rox

+0

+ backgroundSessionConfiguration: est unique en ce sens qu'il crée une session en arrière-plan. Les sessions d'arrière-plan diffèrent des sessions ordinaires ordinaires en ce sens qu'elles peuvent exécuter des tâches de téléchargement et de téléchargement même lorsque l'application est suspendue, se ferme ou se bloque. L'identificateur spécifié lors de l'initialisation est utilisé pour fournir un contexte aux démons qui peuvent reprendre les transferts d'arrière-plan hors processus. – Woodstock

0

Pour la tâche de téléchargement de travailler en arrière-plan, vous devez utiliser uploadTaskWithRequest:fromFile: au lieu de uploadTaskWithRequest:fromData:

Si vous utilisez NSData pour fournir les fichiers, il fonctionnera alors que l'application est active et arrêtera une fois que l'application est en arrière-plan .

Questions connexes