我想问一个关于下载文件问题的问题。我想向用户显示下载进度。因此,我在操场上实现如下的类和代码,请参阅[代码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 - 结果]
[情景2]
var connectWebSite: webConnect
connectWebSite = webConnect()
connectWebSite.downloadData("http://releases.ubuntu.com/14.04.2/ubuntu-14.04.2-server-amd64.iso")
[场景2 - 结果]
[参考文献1]
[代码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")