NSTemporaryDirectory中的Alamofire MultiPartForm文件

Tom*_*ora 6 delete-file tmp ios swift alamofire

我无法在任何地方找到我的问题的答案,所以我想我已经问过了.

我正在使用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
                                        .
                                        .
                                        .
Run Code Online (Sandbox Code Playgroud)

据我所知,Alamofire通过将它们保存到磁盘来处理创建这些请求,以实现更好的RAM优化.这很聪明,我真的很高兴.它只是完美无瑕.

另一方面,这意味着它基本上使磁盘上的数据有效负载翻倍.

在此输入图像描述

事情是那些文件没有被删除,它甚至导致iOS默认屏幕警告设备在可用空间上运行不足.

我知道如何删除此目录的内容,但在我当前的代码流中,在完成所有请求后删除内容是安全的,甚至可能是100个请求,并且每个请求大约需要20MB的有效负载.所以问题是设备甚至可能没有存储这么多数据的能力.

我的问题是:

成功上传后,我可以让Alamofire删除这些文件中的每一个吗?

对不起,很长的问题,我会在这里给你发一个土豆,但这不是9gag.

yuj*_*uji 2

根据这个问题,你需要自己删除它。

很简单,只需在收到服务器响应后删除 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 {}

        }
      }
    }
  )
Run Code Online (Sandbox Code Playgroud)