2012-11-23 14 views
7

Sto scaricando alcuni file utilizzando AFNetworking tramite una coda. Qui è il mio codice:AFNetworking + queue + cancel operations + junk files

apiClient =[[AFHTTPClient alloc]initWithBaseURL: [NSURL URLWithString:ZFREMOTEHOST]]; 
    for (NSString *element in self.productsArray) { 
      NSURL *url = [NSURL URLWithString:element]; 
      NSURLRequest *request = [NSURLRequest requestWithURL:url]; 

      op = [[AFHTTPRequestOperation alloc] initWithRequest:request]; 

      NSString *documentsDirectory = nil; 
      NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); 
      documentsDirectory = [paths objectAtIndex:0]; 

      NSString *targetFilename = [url lastPathComponent]; 
      NSString *targetPath = [documentsDirectory stringByAppendingPathComponent:targetFilename]; 

      op.outputStream = [NSOutputStream outputStreamToFileAtPath:targetPath append:NO]; 

      [op setCompletionBlockWithSuccess:^(AFHTTPRequestOperation *operation, id responseObject) { 

      } failure:^(AFHTTPRequestOperation *operation, NSError *error) { 
       //failure case 
       NSLog(@"BaaZ File NOT Saved %@", targetPath); 

       //remove the file if saved a part of it! 
       NSFileManager *fileManager = [NSFileManager defaultManager]; 
       [fileManager removeItemAtPath:targetPath error:&error]; 

       if (error) { 
        NSLog(@"error dude"); 
       } 

       if ([operation isCancelled]) { 
        //that doesn't work. 
        NSLog(@"Canceled"); 
       } 
      }]; 

      [op setDownloadProgressBlock:^(NSInteger bytesRead, long long totalBytesRead, long long totalBytesExpectedToRead) { 
       if (totalBytesExpectedToRead > 0) { 
        dispatch_async(dispatch_get_main_queue(), ^{ 
         self.progressView.alpha = 1; 
         self.progressView.progress = (float)totalBytesRead/(float)totalBytesExpectedToRead; 
         NSString *label = [NSString stringWithFormat:@"Downloaded %lld of %lld bytes", totalBytesRead,totalBytesExpectedToRead]; 
         self.progressLabel.text = label; 
        }); 
       } 
      }]; 
     [self.resourcesArray addObject:op]; 

     } 
    for (AFHTTPRequestOperation *zabols in self.resourcesArray) { 
     [apiClient.operationQueue addOperation:zabols]; 
    } 

il codice sta lavorando bene su download del file, ma voglio un po 'di annullare la funzionalità in modo ho un pulsante con un'azione che ha il codice qui sotto:

[apiClient.operationQueue cancelAllOperations]; 

le operazioni si annullano file ma poi ci sono alcuni file spazzatura nella cartella Documenti. Dicendo junk intendo file che ha iniziato a scaricarli li ho cancellati e ottengo un file con lo stesso nome ma inutile non può essere aperto perché è danneggiato.

Come posso impedire a AF di farlo e conservare solo i file completati quando lo annullo?

qualsiasi aiuto sarebbe grato.

provato anche la cancellazione di posti di lavoro da lavoro del genere:

for (AFHTTPRequestOperation *ap in apiClient.operationQueue.operations) { 
     [ap cancel]; 
     NSLog(@"%@",ap.responseFilePath); 
     NSFileManager *fileManager = [NSFileManager defaultManager]; 
     [fileManager removeItemAtPath:ap.responseFilePath error:nil]; 

    } 

e l'eliminazione dei file spazzatura, ma che non funziona neanche.

+1

si desidera giunche da eliminare o completamente i file scaricati non danneggiati? –

+0

sì esattamente ho anche provato con la proprietà isFinished ma continuava a scaricarli anche se li ho cancellati! – zaabalonso

risposta

7

Provare a utilizzare l'estensione AFDownloadRequestOperation, supporta inoltre riprendere un download parziale, utilizza una directory temporanea e dispone di un blocco speciale che aiuta a calcolare il corretto avanzamento del download.

+0

Wow, questo sembra fantastico! Grazie per averlo condiviso. –

+0

grazie mille amico! Ci proverò! – zaabalonso

-1

Si può anche provare che: github

+0

il codice è troppo grande per essere aggiunto qui e potrebbe aiutare qualcuno che è il motivo per cui è stato aggiunto qui! Che cosa suggerisci? – zaabalonso