Swift将下载的文件放入文件夹

时间:2016-09-27 14:16:28

标签: ios swift download nsurlsession

我想下载一个文件并将其放入已知路径中。我搜索过,但我不明白我该怎么做。

这是下载代码:

func downloadFile(timeout: NSTimeInterval, completionHandler:(megabytesPerSecond: Double?, error: NSError?) -> ()) {
        let url = NSURL(string: "http://insert.your.site.here/yourfile")!

        startTime = CFAbsoluteTimeGetCurrent()
        stopTime = startTime
        bytesReceived = 0
        speedTestCompletionHandler = completionHandler

        let configuration = NSURLSessionConfiguration.ephemeralSessionConfiguration()
        configuration.timeoutIntervalForResource = timeout
        let session = NSURLSession(configuration: configuration, delegate: self, delegateQueue: nil)
        session.dataTaskWithURL(url).resume()
    }

    func URLSession(session: NSURLSession, dataTask: NSURLSessionDataTask, didReceiveData data: NSData) {
        bytesReceived! += data.length
        stopTime = CFAbsoluteTimeGetCurrent()
    }

如何将收到的数据放入文件夹?

注意:我使用NSURLSESSIONNSURLSessionDataTask

1 个答案:

答案 0 :(得分:1)

我过去实现这个的方法是维护dataTasks及其相关数据对象的字典(如果你一次运行多个任务)作为实现任务的类的存储变量。

我不确定您使用的语法是什么,我认为它在Swift 2和3之间发生了变化。

在Swift 2中,使用NSURLSession(session:dataTask:didReceiveData),您可以执行以下操作:

if let existingData = taskDictionary[dataTask] {
    let newData : NSMutableData = existingData.mutableCopy()
    newData.append(data)
    taskDictionary[dataTask] = newData as NSData
}

在Swift3中,Data本身是可变的(没有相应的可变子类),所以我相信你可以直接调用append。

无论哪种方式,这都会逐渐构建您的数据对象。任务完成后,您可以使用相关的委托函数尝试使用data.writeToFile或data.write通过try ... catch子句保存数据(同样取决于您的swift版本)。

希望有所帮助。