Alamofire 没有将文件保存到磁盘
Posted
技术标签:
【中文标题】Alamofire 没有将文件保存到磁盘【英文标题】:Alamofire not saving file to disk 【发布时间】:2015-08-11 00:18:00 【问题描述】:我正在尝试将 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 数据库的路径?
【问题讨论】:
【参考方案1】:您需要先删除该文件。 Alamofire 仅尝试将文件从临时位置移动到您在 destination
闭包中提供的最终位置。
【讨论】:
【参考方案2】:您可以在Alamofire.DownloadRequest
上创建一个扩展,以提供有关如何下载文件的选项,您可以在其中使用选项DownloadRequest.DownloadOptions.removePreviousFile
。
有关如何执行此操作的详细信息,请参阅我对this 问题的回答。
【讨论】:
以上是关于Alamofire 没有将文件保存到磁盘的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 Alamofire.request() 将 XML 肥皂响应保存到文件?
如何使用 Alamofire 将用户配置文件图像保存到 MYSQL 数据库,然后在以下屏幕上检索