ios - NSTemporaryDirectory 中的 Alamofire MultiPartForm 文件

标签 ios swift delete-file alamofire tmp

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

我正在使用 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 优化。这很聪明,我真的很高兴。它完美无缺。

另一方面,这意味着它基本上将磁盘上的数据负载加倍。

enter image description here

问题是那些文件没有被删除,它甚至会导致 iOS 默认屏幕警告设备可用空间不足。

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

我的问题是:

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

很抱歉,我的问题很长,我会在这里给你发一个土 bean ,但这不是 9gag。

最佳答案

根据这个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 {}

        }
      }
    }
  )

关于ios - NSTemporaryDirectory 中的 Alamofire MultiPartForm 文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34958052/

相关文章:

ios - 如何在Ionic/Cordova构建中正确引用iOS第三方框架,以免引发dyld:库未加载:@rpath错误

ios - WKWebView不使用URLCache

swift - 在 Swift 中为引用的 C 结构中的属性设置值

ios - 在 Swift 中从 UImage 数组创建视频时出现内存崩溃问题

arrays - 具有可变内容类型和长度的元组数组?

batch-file - 批量删除文件且无错误提示

performance - Neo4j 删除图大数据

ios - 更改 Carthage Swift 版本

php - 删除文件夹内除最后一个之外的所有文件?

ios - 将图像上传到 S3 无法完成上传