允许使用alamofire覆盖文件

时间:2014-12-04 19:05:46

标签: ios swift alamofire

我正在使用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

}

2 个答案:

答案 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