我在S3上有一个视频文件,我正在尝试保存到磁盘。但是,如果该文件已存在于磁盘上,我想覆盖它。我写了这个函数来下载文件,但它永远不会保存文件。我可以看到进度%增加。但是,如何访问生成的文件并将其保存到磁盘?
var finalPath: NSURL?
Alamofire.download(.GET, s3Url) { temporaryURL, response in
let fileManager = NSFileManager.defaultManager()
if let directoryURL = fileManager.URLsForDirectory(.DocumentDirectory, inDomains: .UserDomainMask)[0] as? NSURL {
let pathComponent = response.suggestedFilename
finalPath = directoryURL.URLByAppendingPathComponent(pathComponent!)
println(finalPath)
//remove the file if it exists
if fileManager.fileExistsAtPath(finalPath!.absoluteString!) {
println("file exists on disk, removing..")
fileManager.removeItemAtPath(finalPath!.absoluteString!, error: nil)
}
return finalPath!
}
return temporaryURL
}
.validate()
.progress { bytesRead, totalBytesRead, totalBytesExpectedToRead in
let progress = (Double(totalBytesRead) / Double(totalBytesExpectedToRead)) * 100
println(String(format: "%.2f", progress))
}
.response { request, response, data, error in
println(request)
println(response)
if let mediaData = data {
println("saving file to disk")
mediaData.writeToURL(finalPath!, atomically: true)
}
}
通常我会使用文档中提供的示例,但如果文件已经存在则失败。即:
let destination = Alamofire.Request.suggestedDownloadDestination(directory: .DocumentDirectory, domain: .UserDomainMask)
那么,如何下载文件,如果存在则覆盖它并将文件写入的路径记录到我的coreData数据库中?
答案 0 :(得分:2)
您需要先删除该文件。 Alamofire只会尝试将文件从临时位置移动到您在destination
闭包中提供的最终位置。
答案 1 :(得分:0)
您可以在Alamofire.DownloadRequest
上创建扩展程序,以提供有关如何使用选项DownloadRequest.DownloadOptions.removePreviousFile
下载文件的选项。
有关如何操作的详细信息,请参阅我对this问题的回答。