我正在使用alamofire下载PDF文件。它基本上有效,但是当多次下载时,iOS似乎没有覆盖该文件。我收到这个错误:
可选(错误域= NSCocoaErrorDomain代码= 516"操作 无法完成。 (可可错误516。)"的UserInfo = 0x1740feb80 {NSSourceFilePathErrorKey = /私有的/ var /移动/容器/数据/应用/ B2674ABD-95F1-42AF-9F79-FE21F2929E14 / TMP / CFNetworkDownload_1b6ZK8.tmp, NSUserStringVariant =( 移动),NSDestinationFilePath = / var / mobile / Containers / Data / Application / B2674ABD-95F1-42AF-9F79-FE21F2929E14 / Documents / November 2014.pdf,NSFilePath = / private / var / mobile / Containers / Data / Application / B2674ABD-95F1-42AF-9F79-FE21F2929E14 / tmp / CFNetworkDownload_1b6ZK8.tmp, NSUnderlyingError = 0x17405fb00"操作无法完成。 文件存在"})
如何告诉alamofire覆盖该文件?我的代码:
var fileName = ""
var filePath = ""
Alamofire.manager.download(Router.listToPdf(), destination: { (temporaryURL, response) -> (NSURL) in
if let directoryURL = NSFileManager.defaultManager().URLsForDirectory(.DocumentDirectory, inDomains: .UserDomainMask)[0] as? NSURL {
fileName = response.suggestedFilename!
finalPath = directoryURL.URLByAppendingPathComponent(fileName!)
return finalPath!
}
return temporaryURL
}).response { (_, _, data, err) -> Void in
}
答案 0 :(得分:19)
在return
- finalPath
之前,使用NSFileManager
检查并删除该路径上的所有现有文件。
if NSFileManager.defaultManager().fileExistsAtPath(finalPath) {
NSFileManager.defaultManager().removeItemAtPath(finalPath, error: nil)
}
在Swift 3中就像那样
if FileManager.default.fileExists(atPath: finalPath.path) {
do{
try FileManager.default.removeItem(atPath: finalPath.path)
}catch{
print("Handle Exception")
}
}
其中finalPath是网址类型。
答案 1 :(得分:5)
在DownloadFileDestination
关闭中,您可以像这样设置removePreviousFile
:
let destination: DownloadRequest.DownloadFileDestination = { _, _ in
let documentsURL = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask)[0]
let fileURL = documentsURL.appendingPathComponent("pig.png")
return (fileURL, [.removePreviousFile, .createIntermediateDirectories])
}
Alamofire.download(urlString, to: destination).response { response in
print(response)
if response.error == nil, let imagePath = response.destinationURL?.path {
let image = UIImage(contentsOfFile: imagePath)
}
}
来源:https://github.com/Alamofire/Alamofire#download-file-destination