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 数据库,然后在以下屏幕上检索

phpmyadmin - 将文件保存到磁盘

如何将具有文件外依赖项的 sklearn 模型保存到磁盘?

如何将 MailMessage 对象作为 *.eml 或 *.msg 文件保存到磁盘

有啥方法可以将 API 响应作为文件保存到本地计算机磁盘