【问题标题】:Alamofire MultiPartForm files in NSTemporaryDirectoryNSTemporaryDirectory 中的 Alamofire MultiPartForm 文件
【发布时间】:2016-01-23 00:11:20
【问题描述】:

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

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

有一个代码sn-p:

    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 优化。这很聪明,我对此感到非常高兴。它完美无瑕。

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

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

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

我的问题是:

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

对不起,这个问题太长了,我会在这里给你发一个土豆,但这不是 9gag。

【问题讨论】:

    标签: ios swift delete-file alamofire tmp


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-12-07
      • 2021-04-01
      • 1970-01-01
      • 2012-06-17
      相关资源
      最近更新 更多