Alamofire没有将文件保存到磁盘

时间:2015-08-11 00:18:00

标签: swift alamofire

我在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数据库中?

2 个答案:

答案 0 :(得分:2)

您需要先删除该文件。 Alamofire只会尝试将文件从临时位置移动到您在destination闭包中提供的最终位置。

答案 1 :(得分:0)

您可以在Alamofire.DownloadRequest上创建扩展程序,以提供有关如何使用选项DownloadRequest.DownloadOptions.removePreviousFile下载文件的选项。

有关如何操作的详细信息,请参阅我对this问题的回答。