NSTemporaryDirectory 中的 Alamofire MultiPartForm 文件
Alamofire MultiPartForm files in NSTemporaryDirectory
我无法在任何地方找到我的问题的答案,所以我想我已经问过了。
我正在使用 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 优化。这很聪明,我真的很高兴。它完美无缺。
另一方面,这意味着它基本上 将磁盘上的数据负载加倍。
问题是那些文件没有被删除,它甚至导致 iOS 默认屏幕警告设备 运行 空闲 space。
我知道如何删除这个目录的内容,但是在我现在的代码流程中,在所有请求完成后删除内容是安全的,甚至可能是100个请求,每个请求大约需要20MB的有效载荷。所以问题是设备可能甚至没有存储这么多数据的能力。
我的问题是:
我可以让 Alamofire 在成功上传后删除这些文件中的每一个吗?
抱歉,这个问题太长了,我想 post 给你一个马铃薯,但这不是 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 {}
}
}
}
)
我无法在任何地方找到我的问题的答案,所以我想我已经问过了。
我正在使用 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 优化。这很聪明,我真的很高兴。它完美无缺。
另一方面,这意味着它基本上 将磁盘上的数据负载加倍。
问题是那些文件没有被删除,它甚至导致 iOS 默认屏幕警告设备 运行 空闲 space。
我知道如何删除这个目录的内容,但是在我现在的代码流程中,在所有请求完成后删除内容是安全的,甚至可能是100个请求,每个请求大约需要20MB的有效载荷。所以问题是设备可能甚至没有存储这么多数据的能力。
我的问题是:
我可以让 Alamofire 在成功上传后删除这些文件中的每一个吗?
抱歉,这个问题太长了,我想 post 给你一个马铃薯,但这不是 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 {}
}
}
}
)