美文网首页
Swift-URLSessionDownloadTask断点下载

Swift-URLSessionDownloadTask断点下载

作者: SK丿希望 | 来源:发表于2018-09-25 19:16 被阅读0次
image.png
import UIKit

/// 遵守协议
class ViewController: UIViewController,URLSessionDownloadDelegate {

    @IBOutlet weak var progressView: UIProgressView! // 进度条
    
    var downloading = false // 记录是否在下载
    var downloadData: Data? // 记录已下载的数据

    lazy var session: URLSession = {
        let configuration = URLSessionConfiguration.default
        configuration.isDiscretionary = true //自由决定选择哪种网络状态进行下载数据
        let session = URLSession(configuration: configuration, delegate: self, delegateQueue: nil)
        return session
    }()
    
    // MARK: - 下载任务
    lazy var downloadTask : URLSessionDownloadTask = {
        let request = URLRequest.init(url: URL(string: "https://hjmys.oss-cn-shenzhen.aliyuncs.com/911f7716b1b4a4edd583dd604db47ae468cf4b65.mp4")!)
        let downloadTask = session.downloadTask(with: request)
        return downloadTask
    }()

    override func viewDidLoad() {
        super.viewDidLoad()

    }
    ///按钮点击事件
    @IBAction func buttonClick(_ btn: UIButton) {
        switch  btn.tag {
        case  100:
            print("开始")
            startDownload()
        case  101:
            print("暂停")
            pauseDownload()
        case  102:
            print("恢复")
            resumeDownload()
        default:
            break
        }
        
    }
    // MARK: - 开始下载
    func startDownload() {
        downloading = true
        self.downloadTask.resume()
    }
    // MARK: - 暂停下载
    func pauseDownload() {
        self.downloadTask.cancel { [weak self] (resumeData) in
            self?.downloadData = resumeData
        }
        downloading = false
    }
    // MARK: - 恢复下载
    func resumeDownload(){
        if (downloadData != nil) {
            self.downloadTask = self.session.downloadTask(withResumeData: self.downloadData!)
            self.downloadTask.resume()
            self.downloading = true
        }
    }
    
    // 下载代理方法,下载结束
    func urlSession(_ session: URLSession, downloadTask: URLSessionDownloadTask, didFinishDownloadingTo location: URL) {
        print("下载结束")
    }
    // 下载代理方法,监听下载进度
    func urlSession(_ session: URLSession, downloadTask: URLSessionDownloadTask, didWriteData bytesWritten: Int64, totalBytesWritten: Int64, totalBytesExpectedToWrite: Int64) {
        let request = URLRequest.init(url: URL(string: "https://hjmys.oss-cn-shenzhen.aliyuncs.com/911f7716b1b4a4edd583dd604db47ae468cf4b65.mp4")!)
        if downloadTask.currentRequest?.url == request.url {
            print("是当前任务")
        } else {
            print("不是当前任务")
        }
        if downloading == true {
            DispatchQueue.main.async {
                print(Float(totalBytesWritten) / Float(totalBytesExpectedToWrite))
                self.progressView.setProgress(Float(totalBytesWritten) / Float(totalBytesExpectedToWrite), animated: true)
            }
        }
    }
    // 下载代理方法,下载偏移
    func urlSession(_ session: URLSession, downloadTask: URLSessionDownloadTask, didResumeAtOffset fileOffset: Int64, expectedTotalBytes: Int64) {
        print("下载偏移")
        // 下载偏移,主要用于暂停续传
    }
    /*
     * 该方法下载成功和失败都会回调,只是失败的是error是有值的,
     * 在下载失败时,error的userinfo属性可以通过NSURLSessionDownloadTaskResumeData
     * 这个key来取到resumeData(和上面的resumeData是一样的),再通过resumeData恢复下载
     */
    func urlSession(_ session: URLSession, task: URLSessionTask, didCompleteWithError error: Error?) {
        
    }
}

Dome

相关文章

  • Swift-URLSessionDownloadTask断点下载

    Dome

  • 基于Okhttp实现断点下载(续传)和分片下载

    断点下载/续传 断点下载是针对下载大文件需求的一种优化机制,可以从上次下载的断点处继续下载。断点续传原理也相同,只...

  • 断点下载

    效果图 断点下载的过程 这里是简单的一个下载,下一篇介绍列表的断点下载1.绘制UI图,并初始化控件2.创建实体类:...

  • 断点下载

    今天做了断点下载视频或者MP3,具体实现如下 1、主要应用了NSURLSessionDownloadTask和NS...

  • 断点下载

    链接转载;判断当前Service是否是重启的Servciehttp://blog.csdn.net/luyi325...

  • 断点下载

    http://www.jianshu.com/p/f65e32012f07

  • 断点下载

    断点下载重点 利用HTTP请求头的Range属性,就可以实现从指定位置开始下载表示头500个字节:Range: b...

  • 断点下载

    需要遵循NSURLConnectionDataDelegate协议/** 当前的长度/@property (no...

  • 断点下载

  • OC网络:NSURLSession-downloadTask的断

    NSURLSessionDownloadDelegate断点下载说明: 能实现断点下载,即在程序不退出的情况下:暂...

网友评论

      本文标题:Swift-URLSessionDownloadTask断点下载

      本文链接:https://www.haomeiwen.com/subject/vuoloftx.html