2016-01-23 18 views
5

Non sono stato in grado di trovare la risposta alla mia domanda da nessuna parte, quindi ho pensato di averlo chiesto.File Alamofire MultiPartForm in NSTemporaryDirectory

Sto usando Alamofire 3.1.5 per caricare un volume piuttosto grande di immagini, stiamo parlando in centinaia di MB.

C'è un frammento di codice:

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 
             . 
             . 
             . 

quanto ho capito Alamofire gestisce la creazione di quelli richiesta salvandoli su disco, per una migliore Ottimizzazione dei RAM. Che è intelligente e ne sono davvero felice. Funziona semplicemente senza problemi.

D'altra parte ciò significa che è fondamentalmente il raddoppiare il carico di dati su disco.

enter image description here

Le cose è che coloro i file uno non si è trovato eliminato, provoca anche schermata di default di iOS avvertendo che il dispositivo si sta esaurendo lo spazio libero.

So come eliminare il contenuto di questa directory, ma nel mio flusso di codice corrente è possibile eliminare il contenuto dopo aver completato tutte le richieste, potrebbero essere anche 100 richieste e ognuna di esse richiede circa 20 MB di carico utile. Quindi il fatto è che il dispositivo potrebbe non avere nemmeno la capacità di memorizzare questa quantità di dati.

La mia domanda è:

Posso fare Alamofire per eliminare ogni singolo uno di questi file dopo che viene caricato con successo?

Scusate per una domanda piuttosto lunga, vorrei pubblicare una patata qui, ma questo non è 9gag.

risposta

2

In base a questo this issue, sarà necessario eliminarlo da soli.

È semplice, basta eliminare tutti i file generati da Alamofire dopo aver ricevuto una risposta dal server. Ecco come l'ho fatto:

// 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 {} 

     } 
     } 
    } 
) 
Problemi correlati