Скачать файл с AFNetworking в Swift

Я хочу скачать файл с URL-адреса с помощью AFNetworking в быстром и показать прогресс загрузки. У меня есть этот код, но он не работает:

func downloadPdf()
{
    var request = NSURLRequest(URL: NSURL(string: "http://www.sa.is/media/1039/example.pdf"))
    let session = AFHTTPSessionManager()

    var progress: NSProgress?

    var downloadTask = session.downloadTaskWithRequest(request, progress: &progress, destination: {(file, responce) in self.pathUrl},
        completionHandler:
        {
            response, localfile, error in
            println("response \(response)")
        })

    downloadTask.resume()
}

var pathUrl: NSURL
{
    var path = NSSearchPathForDirectoriesInDomains(.DocumentDirectory, .UserDomainMask, true)[0] as String
    var url = NSURL(string: path.stringByAppendingPathComponent("file.pdf"))
    println(url.path)
    return url
}

Что я делаю не так?

1 ответ

Решение

Проблема заключается в pathUrl компьютерная собственность. Если вы печатаете URL (а не url.path), вы увидите, что ваш URL недействителен. Это потому, что вы используете NSURL(string:)и для файловых URL, вы должны использовать NSURL(fileURLWithPath:), Таким образом:

var pathUrl: NSURL {
    let documentsFolder = NSSearchPathForDirectoriesInDomains(.DocumentDirectory, .UserDomainMask, true).first!
    let documentsURL = NSURL(fileURLWithPath: documentsFolder)
    return documentsURL.URLByAppendingPathComponent("file.pdf")
}

Или, что еще лучше, вообще обойти путь и использовать URLForDirectory чтобы получить .DocumentDirectory как URL:

var pathUrl: NSURL {
    return try! NSFileManager.defaultManager().URLForDirectory(.DocumentDirectory, inDomain: .UserDomainMask, appropriateForURL: nil, create: false)
        .URLByAppendingPathComponent("test.pdf")
}

Или в Swift 3:

var pathUrl: URL {
    return try! FileManager.default.urlForDirectory(.documentDirectory, in: .userDomainMask, appropriateFor: nil, create: false)
        .appendingPathComponent("test.pdf")
}
Другие вопросы по тегам