在NSURLSession swift中下载TaskWithRequest

时间:2015-02-24 06:33:47

标签: ios swift nsurlsession

我想问一个关于下载文件问题的问题。我想向用户显示下载进度。因此,我在操场上实现如下的类和代码,请参阅[代码1]。

当我执行下面的代码[场景1]时,我们可以得到结果。我看到内容大小值是-1。

之后,我执行以下代码[场景2]。我看到内容大小值不是-1。

这里有什么问题?这是因为Chrome的Advanced Rest Client可以获得" Content-Length" (请参阅[参考1]),NSURLSession CAN NOT。

我想显示html的下载进度。请帮忙。

[情景1]

var connectWebSite: webConnect

connectWebSite = webConnect()
connectWebSite.downloadData("http://www.nba.com")

[场景1 - 结果] enter image description here

[情景2]

var connectWebSite: webConnect

connectWebSite = webConnect()
connectWebSite.downloadData("http://releases.ubuntu.com/14.04.2/ubuntu-14.04.2-server-amd64.iso")

[场景2 - 结果] enter image description here

[参考文献1] enter image description here

[代码1]

import UIKit
import SystemConfiguration
import XCPlayground
import Foundation

XCPSetExecutionShouldContinueIndefinitely()

import Foundation

class webConnect: NSObject, NSURLSessionDelegate, NSURLSessionTaskDelegate ,NSURLSessionDataDelegate, NSURLSessionDownloadDelegate
{
    var mainSession : NSURLSession = NSURLSession()

    override init()
    {
        super.init()
        var configuration = NSURLSessionConfiguration.defaultSessionConfiguration()
        mainSession = NSURLSession(configuration: configuration,
            delegate: self,
            delegateQueue:NSOperationQueue.mainQueue())
    }

    /* delegate function during download */
    func URLSession(session: NSURLSession, downloadTask: NSURLSessionDownloadTask, didWriteData bytesWritten: Int64, totalBytesWritten: Int64, totalBytesExpectedToWrite: Int64) {

        var x: NSHTTPURLResponse

        x = downloadTask.response as NSHTTPURLResponse

        println("Content size - \(x.expectedContentLength)")
        println("download status - \(bytesWritten) \(totalBytesWritten) \(totalBytesExpectedToWrite) ")
    }

    /* delegate function fire when download completed */
    func URLSession(session: NSURLSession, downloadTask: NSURLSessionDownloadTask, didFinishDownloadingToURL location: NSURL)
    {
        var locateData: NSData
        var result: String

        locateData = NSData(contentsOfURL: location)!
        result = NSString(data: locateData, encoding: NSASCIIStringEncoding)!

        println("final result")
    }

    /* delegate function fire when error occur during download */
    func URLSession(session: NSURLSession, task: NSURLSessionTask, didCompleteWithError error: NSError?) {
        if (error != nil)
        {
            println("error - \(error?.description)")
        }
    }

    func downloadData(URLString: String)
    {
        var request = NSMutableURLRequest(URL: NSURL(string: URLString)!)
        var result : String = ""


        var task = self.mainSession.downloadTaskWithRequest(request)
        task.resume()

    }
}
var connectWebSite: webConnect

connectWebSite = webConnect()
/* Scenario 1*/
connectWebSite.downloadData("http://www.nba.com")
/* Scenario 2*/
connectWebSite.downloadData("http://releases.ubuntu.com/14.04.2/ubuntu-14.04.2-server-amd64.iso")

0 个答案:

没有答案