1

I want to download file from URL using AFNetworking in swift, and show downloading progress. I have this code, but it doesn't work:

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
}

What I doing wrong?

ChikabuZ
  • 10,031
  • 5
  • 63
  • 86

1 Answers1

3

The issue is the pathUrl computed property. If you print the URL (rather than url.path), you'll see that your URL is not valid. That's because you're using NSURL(string:), and for file URLs, you should use NSURL(fileURLWithPath:). Thus:

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

Or, even better, bypass the path altogether, and use URLForDirectory to get the .DocumentDirectory as a URL:

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

Or in Swift 3:

var pathUrl: URL {
    return try! FileManager.default.urlForDirectory(.documentDirectory, in: .userDomainMask, appropriateFor: nil, create: false)
        .appendingPathComponent("test.pdf")
}
Rob
  • 415,655
  • 72
  • 787
  • 1,044