2012-06-20 24 views
6

AFNetworking ile dosyaları> 500 Mo indirmem gerekiyor. Bazen, indirme süresi> 10 dakikadır ve uygulama arka planda ise, indirme işlemi tamamlanamaz.AFNetworking + büyük indirme dosyaları + özgeçmiş yüklemeleri

Kısmi yüklemeleri denemek istiyorum. Çok fazla bağlantı buldum ve bu AFHTTPRequestOperation üzerinde pause() ve resume() yöntemleri ile mümkün görünüyor.

Aslında yaptı:

[self.downloadOperation setShouldExecuteAsBackgroundTaskWithExpirationHandler:^{ 
    // Clean up anything that needs to be handled if the request times out 
    [self.downloadOperation pauseDownload]; 
    }]; 

DownloadOperation AFHTTPRequestOperation (tekil) bir alt sınıfıdır.

Ve AppDelegate içinde

:

- (void)applicationWillEnterForeground:(UIApplication *)application 
{ 
    // resume will only resume if it's paused... 
    [[DownloadHTTPRequestOperation sharedOperation] resumeDownload]; 
} 

sunucu ...

Sorularım başlıklarında Yeni aralık almak için OK:

1) mi-t yapmak için iyi bir yol o ? 2) Özgeçmişin outputStream'i değiştirmesi gerekiyor mu (ek: NO => append: YES)? Veya AFNetworking tarafından bir yerde mi yönetiliyor? (DownloadHTTPRequestOperation olarak) böyle

self.outputStream = [NSOutputStream outputStreamToFileAtPath:self.filePath append:YES]; 

Something (bulmuyorum): Yardımlarınız için

- (void)pauseDownload 
{ 
    NSLog(@"pause download"); 
    [self pause]; 
} 

- (void)resumeDownload 
{ 
    NSLog(@"resume download"); 
    self.outputStream = [NSOutputStream outputStreamToFileAtPath:self.filePath append:YES]; 
    [self resume]; 
} 

teşekkür ederiz.

cevap

1

Benzer bir görev için eski (ARC olmayan) ASIHTTPRequest çerçevesini kullanarak bitti. AllowResumeForFileDownloads ihtiyacınız olanı yapar. Sunucunun, Aralık http başlığını okuyarak devam etmeyi desteklemesi gerektiğini unutmayın.

if (![[NSFileManager defaultManager] fileExistsAtPath:downloadPath]){ 
    ASIHTTPRequest *request = [ASIHTTPRequest requestWithURL:url]; 
    [request setDelegate:self]; 
    [request setAllowResumeForFileDownloads:YES]; 
    [request setDownloadDestinationPath:downloadPath]; 
    [request setTemporaryFileDownloadPath:tmpPath]; 
    [request startAsynchronous]; 
} 
+0

BTW AFNetworking da "non ARC" – pahan

+1

AFNetworking ARC şimdi etkindir. – tangqiaoboy