2010-03-16 17 views

Répondre

14

Vous ne pouvez pas mettre en pause, mais vous pouvez annuler une connexion, puis en créer une nouvelle pour reprendre l'ancienne. Toutefois, le serveur auquel vous vous connectez doit prendre en charge l'en-tête Range. Réglez-le sur "bytes = size_already_downloaded-", et il devrait reprendre là où vous l'avez annulé.

+0

très bonne réponse –

2

Pour reprendre le téléchargement et obtenir le reste du fichier que vous pouvez définir la valeur Range en-tête de requête HTTP en faisant quelque chose comme ceci:

- (void)downloadFromUrl:(NSURL*)url toFilePath:(NSString *)filePath { 

    NSMutableURLRequest *request = [[NSMutableURLRequest alloc]initWithURL:url  cachePolicy:NSURLRequestReloadIgnoringCacheData timeoutInterval:10]; 
    if (!request) { 
     NSLog(@"Error creating request"); 
     // Do something 
    } 
    [request setHTTPMethod:@"GET"]; 

    // Add header to existing file 
    NSFileManager *fm = [NSFileManager defaultManager]; 
    if([fm fileExistsAtPath:filePath]) { 
     NSError *error = nil;  
     NSDictionary * fileProp = [fm attributesOfItemAtPath:filePath error:&error]; 
     if (error) { 
      NSLog(@"Error: %@", [error localizedDescription]); 
      // Do something 
     } else { 
      // Set header to resume 
      long long fileSize = [[fileProp objectForKey:@"NSFileSize"]longLongValue]; 
      NSString *range = @"bytes="; 
      range = [[range stringByAppendingString:[[NSNumber numberWithLongLong:fileSize] stringValue]] stringByAppendingString:@"-"]; 
      [request setValue:range forHTTPHeaderField:@"Range"]; 
     } 
    } 
    NSURLConnection * connection = [[NSURLConnection alloc] initWithRequest:request delegate:self]; 

    if (!connection) { 
     NSLog(@"Connection failed."); 
     // Do something 
    } 
} 

vous pouvez également utiliser - (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response pour vérifier si le fichier existant est entièrement téléchargé en vérifiant la taille attendue: [response expectedContentLength];. Si les tailles correspondent, vous voulez probablement annuler la connexion.

+0

Finaly a trouvé une solution de travail. Merci beaucoup :-) – byJeevan