2016-01-23 54 views
5

我无法在任何地方找到我的问题的答案,所以我想我已经问过了。NSTemporaryDirectory中的Alamofire MultiPartForm文件

我使用Alamofire 3.1.5上传相当大量的图片,我们正在谈论数百MB。

有一个代码片段:

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

据我了解Alamofire处理它们保存到磁盘,为更好的RAM optimalization创建的请求。这是聪明的,我真的很高兴。它只是完美无瑕。

另一方面,这意味着它基本上是加倍磁盘上的数据有效载荷。

enter image description here

的事情是,这些文件都没有被清除,它甚至会导致iOS的默认屏幕警告该设备上的可用空间不足。

我知道如何删除这个目录的内容,但是在我当前的代码流中,在所有请求完成后删除内容是安全的,甚至可能有100个请求,并且每个请求大约需要20MB有效载荷。因此,设备甚至可能无法存储这些数据量。

我的问题是:

我可以Alamofire删除这些文件中的每一个它得到成功上传后?

对不起,我会在这里发布一个马铃薯,但这不是9gag。

回答

2

根据这个this issue,你需要自己删除它。

很简单,只需删除所有文件Alamofire在您从服务器获得响应后生成。以下是我的做法:

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

     } 
     } 
    } 
)