2016-01-23 16 views
5

Ich konnte nirgendwo eine Antwort auf meine Frage finden, also dachte ich, ich hätte gefragt.Alamofire MultiPartForm-Dateien in NSTemporaryDirectory

Ich benutze für das Hochladen ziemlich großer Bilder, wir sprechen in Hunderten von MB.

Es gibt einen Code-Schnipsel:

self.manager.upload(.POST, url, headers: headers, multipartFormData: { multipartFormData in 
           multipartFormData.appendBodyPart(fileURL: generalURL, name: "general", fileName: "general", mimeType: "image/jpeg") 
           multipartFormData.appendBodyPart(fileURL: img1URL, name: "img1", fileName: "img1", mimeType: "image/jpeg") 
           multipartFormData.appendBodyPart(fileURL: img2URL, name: "img2", fileName: "img2", mimeType: "image/jpeg") 
           multipartFormData.appendBodyPart(fileURL: img3URL, name: "img3", fileName: "img3", mimeType: "image/jpeg") 
           }, encodingCompletion: { encodingResult in 
             . 
             . 
             . 

Wie ich verstehe Alamofire behandelt jene Anfrage zu schaffen, indem sie auf der Festplatte für eine bessere RAM Optimierung zu speichern. Das ist schlau und ich bin sehr glücklich darüber. Es funktioniert einfach einwandfrei.

Auf der anderen Seite bedeutet das, dass es im Grunde verdoppelt die Nutzdaten auf der Festplatte.

enter image description here

Die Dinge ist, dass diejenigen, die eine Datei nicht gelöscht zu werden, es verursacht auch iOS Standardbildschirm Warnung, dass das Gerät auf freie Speicherplatz zur Neige geht.

Ich weiß, wie man Inhalt dieses Verzeichnisses löscht, aber in meinem aktuellen Codefluss ist es sicher, den Inhalt zu löschen, nachdem alle Anfragen abgeschlossen sind, es können sogar 100 Anfragen sein, und jeder von ihnen benötigt ungefähr 20MB Nutzlast. Die Sache ist, dass das Gerät möglicherweise nicht einmal die Kapazität hat, diese Datenmenge zu speichern.

Meine Frage ist:

Kann ich Alamofire machen jede einzelne dieser Dateien zu löschen, nachdem sie erfolgreich hochgeladen wird?

Sorry für ziemlich lange Frage, ich würde Ihnen eine Kartoffel hier, aber das ist nicht 9gag.

Antwort

2

Entsprechend dieser this issue müssen Sie es selbst löschen.

Es ist einfach, löschen Sie einfach alle Dateien Alamofire generiert, nachdem Sie eine Antwort vom Server erhalten. Hier ist, wie ich es gemacht habe:

// Just some upload 
Alamofire.upload(
    .POST, uploadURL, 
    multipartFormData: { multipartFormData in 
    multipartFormData.appendBodyPart(fileURL: somePath, name: "file") 
    }, 
    encodingCompletion: { encodingResult in 
    switch encodingResult { 
     case .Success(let upload, _, _): 
     upload.responseJSON { response in 
     if let JSON = response.result.value { 

      /*** delete temp files Alamofire generated ***/ 
      let temporaryDirectoryPath = NSTemporaryDirectory() 
      let dir = NSURL(fileURLWithPath: temporaryDirectoryPath, isDirectory: true) 
      .URLByAppendingPathComponent("com.alamofire.manager") 
      .URLByAppendingPathComponent("multipart.form.data") 
      do { 
      try NSFileManager.defaultManager().removeItemAtPath(dir.path!) 
      } catch {} 

     } 
     } 
    } 
)