Search code examples
iosswiftdownloadnsurltemporary

Swift NSURLSession didFinishDownloadingURL moving from Temp file


I am trying download files with NSURL library and in with the function below. It used to store it in the temp folders so I couldn't access the files before they were removed.

I am trying to relocate downloaded files into Documents directory, but when I try to print out NSData as NSString it returns nil. I don't get what is wrong with code below.

func URLSession(session: NSURLSession, downloadTask: NSURLSessionDownloadTask, didFinishDownloadingToURL location: NSURL) {

    //create a NSFileManager Instance
    let fileManager = NSFileManager.alloc()
    //Get documents directory URL
    let documentsUrl:NSArray = fileManager.URLsForDirectory(.DocumentDirectory, inDomains: .UserDomainMask)
    let documentsDirectory:NSURL = documentsUrl.firstObject as NSURL

    //Get the file name and create a destination URL
    let sendingFileName = downloadTask.originalRequest.URL
    //convert sendingFileName into String
    let fileString = sendingFileName.absoluteString
    let destinationURL = documentsDirectory.URLByAppendingPathComponent(fileString!)

    //Hold this file as an NSData and write it to the new location
    let fileData = NSData(contentsOfURL: location)
    let fileDataString = NSString(data: fileData!, encoding: NSUTF8StringEncoding)
    println(fileDataString)
    fileData?.writeToURL(destinationURL, atomically: false)


}

Solution

  • This should also work.

    let fileManager = NSFileManager.defaultManager()
    
        //Get documents directory URL
        let documentsDirectory = fileManager.URLsForDirectory(.DocumentDirectory, inDomains: .UserDomainMask).first as! NSURL
    
        // Check if file exist
        if (fileManager.fileExistsAtPath(documentsDirectory)){
            fileManager.removeItemAtURL(NSURL(documentsDirectory), error: nil)
        }
    
        // Copy File From Temp Folder To Documents Directory
        fileManager.copyItemAtURL(location, toURL: NSURL(fileURLWithPath: documentsDirectory), error: &error)