2016-05-19 24 views
2

Wie kann ich überprüfen, ob eine bestimmte Datei bereits heruntergeladen wurde, bevor Sie sie mit Alamofire erneut herunterladen? Ich verwende suggestedDownloadDestination, also wählt Alamofire automatisch den Namen der Datei und speichert sie im gewählten Verzeichnis, zum Beispiel .CachesDirectory. Das Problem ist, dass der Wert von suggestedDownloadDestination vom Typ DownloadFileDestination ist, der eine NSURL nur zurückgibt, indem er ihn mit der Anforderung response anruft, aber auf diese Weise konnte ich nie den Dateipfad kennen, ohne vorher eine Anforderung auszuführen.Überprüfen Sie, ob eine Datei bereits vorhanden ist, bevor Sie sie mit Alamofire herunterladen + supportedDownloadDestination

Dies ist der Code noch eine Datei mit Alamofire zum Download Ich benutze:

Alamofire.download(.GET, downloadLink, destination: destination).progress { 
        bytesRead, totalBytesRead, totalBytesExpectedToRead in 

        }.response { 
         request, response, data, error in 

         guard error == nil else { 
          return 
         } 

         // This will give me the file path but we're already in a Request! 
         print("\(destination(NSURL(string: "")!, response!))") 
       } 

Was bin ich?

+1

Haben Sie eine Lösung gefunden? – osrl

+0

@osrl Leider genug Alamofire gibt Ihnen nicht die Möglichkeit, dies leicht zu tun, wie Sie supportedDownloadDestination verwenden würden, habe ich Fixes mit einem benutzerdefinierten Pfad für das Download-Verzeichnis und entfernen suggeredDownloadDestination – Aluminum

+0

Ich versuchte '.head' Methode, um die Zieldatei zu finden Pfad, und überprüfen Sie, ob es existiert, bevor Sie die Datei herunterladen. Aber Alamofire erstellt die Datei auch dann, wenn die Download-Request-Methode '.head' ist. Das hat also auch nicht funktioniert. – osrl

Antwort

2

Nicht sicher, ob Sie diese noch herausgefunden, aber Sie können eine Erweiterung über Alamofire.DownloadRequest wie schaffen:

extension Alamofire.DownloadRequest { 
    open class func suggestedDownloadDestination(
     for directory: FileManager.SearchPathDirectory = .documentDirectory, 
     in domain: FileManager.SearchPathDomainMask = .userDomainMask, 
     with options: DownloadOptions) 
     -> DownloadFileDestination 
    { 
     return { temporaryURL, response in 
       let destination = DownloadRequest.suggestedDownloadDestination(for: directory, in: domain)(temporaryURL, response) 
      return (destination.destinationURL, options) 
     } 
    } 
} 

Jetzt können Sie in den Optionen-Parameter angeben, ob Sie die Datei überschrieben werden soll:

let destination = DownloadRequest.suggestedDownloadDestination(for: .cachesDirectory, 
                   in: .userDomainMask, 
                   with: [DownloadRequest.DownloadOptions.removePreviousFile]) 
Verwandte Themen