0
我需要从服务器下载视频并保存视频以备后用。Swift保存下载的视频NSURLSession
因此,我需要下载视频并将其保存在应用程序的文件系统中,至此我可以下载数据(我猜)但无法存储它。
不,我不想使用额外extinsions框架或任何其他。
@IBOutlet var progressView: ProgressView!
@IBOutlet var statusLabel: UILabel!
@IBOutlet var downloadButton: DownloadButton!
private var downloadTask: NSURLSessionDownloadTask?
@IBAction func downloadButtonPressed() {
if let downloadTask = downloadTask {
downloadTask.cancel()
statusLabel.text = ""
} else {
statusLabel.text = "Downloading video"
downloadButton.setTitle("Stop download", forState: .Normal)
createDownloadTask()
}
}
func createDownloadTask() {
//small mp4 video link : http://techslides.com/demos/sample-videos/small.mp4
let url = NSURL(string: "http://techslides.com/demos/sample-videos/small.mp4")!
let downloadRequest = NSMutableURLRequest(URL: url)
let session = NSURLSession(configuration: NSURLSessionConfiguration.defaultSessionConfiguration(), delegate: self, delegateQueue: NSOperationQueue.mainQueue())
downloadTask = session.downloadTaskWithRequest(downloadRequest)
downloadTask!.resume()
}
func URLSession(session: NSURLSession, downloadTask: NSURLSessionDownloadTask, didWriteData bytesWritten: Int64, totalBytesWritten: Int64, totalBytesExpectedToWrite: Int64) {
let progress = Float(totalBytesWritten)/Float(totalBytesExpectedToWrite)
progressView.animateProgressViewToProgress(progress)
progressView.updateProgressViewLabelWithProgress(progress * 100)
progressView.updateProgressViewWith(Float(totalBytesWritten), totalFileSize: Float(totalBytesExpectedToWrite))
}
func URLSession(session: NSURLSession, downloadTask: NSURLSessionDownloadTask, didFinishDownloadingToURL location: NSURL) {
statusLabel.text = "Download finished"
print(downloadTask.response.suggestedFilename) // Gives file name
resetView()
}
func URLSession(session: NSURLSession, task: NSURLSessionTask, didCompleteWithError error: NSError?) {
if error != nil {
statusLabel.text = "Download failed"
} else {
statusLabel.text = "Download finished"
}
resetView()
}
func resetView() {
downloadButton.setTitle("Start download", forState: .Normal)
downloadTask!.cancel()
}
您可以使用响应suggestedFilename –
'downloadTask.response?.suggestedFilename' –
@LeoDabus确定它给我的文件名,现在我该怎样保存和重新使用它 –