2010-03-16 13 views

Respuesta

14

No puede pausar, per-se, pero puede cancelar una conexión, y luego crear una nueva para continuar donde la dejó. Sin embargo, el servidor al que se está conectando debe ser compatible con el encabezado del rango. Establezca esto en "bytes = size_already_downloaded-", y debería retomar justo donde lo canceló.

+0

muy buena respuesta –

2

Para reanudar la descarga y obtener el resto del archivo se puede establecer el valor Range en encabezado de solicitud HTTP al hacer algo como esto:

- (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 
    } 
} 

También se puede usar - (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response para comprobar si el archivo existente es totalmente descargada al verificar el tamaño esperado: [response expectedContentLength];. Si los tamaños coinciden, probablemente desee cancelar la conexión.

+0

Finaly encontró una solución de trabajo. Muchas gracias :-) – byJeevan