Estoy descargando datos muy grandes de un servidor con la clase NSURLConnection.Funcionalidad de descarga de currículum en NSURLConnection
¿Cómo puedo implementar una instalación de pausa para poder reanudar la descarga?
Estoy descargando datos muy grandes de un servidor con la clase NSURLConnection.Funcionalidad de descarga de currículum en NSURLConnection
¿Cómo puedo implementar una instalación de pausa para poder reanudar la descarga?
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ó.
muy buena respuesta –
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.
Finaly encontró una solución de trabajo. Muchas gracias :-) – byJeevan
¿ha tenido éxito al implementar la función de pausa? –