Sto scaricando alcuni dati molto grandi da un server con la classe NSURLConnection.Riprendi la funzionalità di download in NSURLConnection
Come posso implementare una funzione di pausa in modo che possa riprendere il download?
Sto scaricando alcuni dati molto grandi da un server con la classe NSURLConnection.Riprendi la funzionalità di download in NSURLConnection
Come posso implementare una funzione di pausa in modo che possa riprendere il download?
Non è possibile mettere in pausa, per sé, ma è possibile annullare una connessione e quindi crearne una nuova per riprendere la posizione in cui il vecchio era stato interrotto. Tuttavia, il server a cui ti stai collegando deve supportare l'intestazione Range. Impostalo su "bytes = size_already_downloaded-", e dovrebbe riprendere esattamente dove l'hai annullato.
ottima risposta –
Per riprendere il download e ottenere il resto del file è possibile impostare il valore Range
nella richiesta HTTP colpo di testa di fare qualcosa di simile:
- (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
}
}
Inoltre è possibile utilizzare - (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response
per verificare se il file esistente è completamente scaricato controllando la dimensione prevista: [response expectedContentLength];
. Se le dimensioni corrispondono probabilmente si desidera annullare la connessione.
Finaly ha trovato una soluzione funzionante. Molte grazie :-) – byJeevan
Sei riuscito a implementare la funzione di pausa? –