91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

iOS怎么使用NSURLConnection實現斷點續傳下載

發布時間:2022-04-27 10:30:29 來源:億速云 閱讀:151 作者:iii 欄目:開發技術

本篇內容介紹了“iOS怎么使用NSURLConnection實現斷點續傳下載”的有關知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領大家學習一下如何處理這些情況吧!希望大家仔細閱讀,能夠學有所成!

一.斷點續傳的原理

斷點續傳的原理:每次在想服務器請求下載數據的同時,要告訴服務器從整個下載文件的數據流的某個還未下載的位置開始下載,然后服務器就返回從哪個位置開始的數據流

二.斷點續傳的實現

第一步:先聲明一些屬性

fileprivate var totalSize: Int64 = 0   // 總大小
fileprivate var currentSize: Int64 = 0 // 當前大小
fileprivate var fileName: String?      // 文件名
fileprivate var fullPath: String?      // 文件路勁
fileprivate var handle: FileHandle?    // 句柄
fileprivate var connection: NSURLConnection?

第二步:創建URL和請求

關鍵是設置請求頭

// 下載文件
func urlConnectionDownload(_ url: String) -> NSURLConnection? {
        var request = URLRequest(url: URL(string: url)!)
        // 設置請求頭信息
        /*
         bytes=0-1000 表示下載0-1000的數據
         bytes=0-     表示從0開始下載直到下載完畢
         bytes=100-   表示從100開始下載直到下載完畢
         */
        request.setValue("bytes=\(currentSize)", forHTTPHeaderField: "Range")
        // 發送異步請求
        connection = NSURLConnection(request: request, delegate: self)
        return connection
    }
    // 取消下載文件
    func urlConnectionCacel() {
        connection?.cancel()
    }

第三步:設置代理NSURLConnectionDataDelegate

第四步:實現代理NSURLConnectionDataDelegate方法

// 接收到響應頭信息的時候就會調用(最先調用的方法),只會調用一次
    func connection(_ connection: NSURLConnection, didReceive response: URLResponse) {
        print("didReceive response")
        // 判斷是否已經下載過了
        if currentSize > 0 {
            // 已經下載過的話,就不需要再次接受response了
            return
        }
        // 文件的總大小
        totalSize = response.expectedContentLength
        // 得到的文件名稱
        fileName = response.suggestedFilename
        // 邊接收數據邊寫文件到沙盒中
        // 1. 獲取文件的全路徑
        if let cache = NSSearchPathForDirectoriesInDomains(.cachesDirectory, .userDomainMask, true).last {
            let nsCache = cache as NSString
            fullPath = nsCache.appendingPathComponent(fileName!)
            // 創建一個空的文件
            FileManager.default.createFile(atPath: fullPath!, contents: nil, attributes: nil)
            // 創建句柄
            handle = FileHandle(forWritingAtPath: fullPath!)
        }
    }
    
    func connection(_ connection: NSURLConnection, didReceive data: Data) {
        print("didReceive data")
        // 把文件句柄移動到文件的末尾
        handle?.seekToEndOfFile()
        // 使用文件句柄寫數據
        handle?.write(data)
        currentSize += data.count
        print(currentSize / totalSize)
    }
    
    func connectionDidFinishLoading(_ connection: NSURLConnection) {
        print("didFinish loading")
        print(fullPath!)
        handle?.closeFile()
        handle = nil
    }

“iOS怎么使用NSURLConnection實現斷點續傳下載”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識可以關注億速云網站,小編將為大家輸出更多高質量的實用文章!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

贡嘎县| 永泰县| 鄂尔多斯市| 冀州市| 土默特左旗| 萝北县| 保亭| 文昌市| 林甸县| 陵川县| 新乡市| 阳曲县| 萍乡市| 乃东县| 高清| 彰武县| 上饶县| 田林县| 英吉沙县| 临安市| 无锡市| 闽清县| 宜君县| 阿克陶县| 乌苏市| 台北市| 水富县| 林周县| 阳朔县| 佳木斯市| 丰县| 巩留县| 岑溪市| 汪清县| 博客| 奉新县| 盖州市| 沐川县| 巴林右旗| 成都市| 阿拉善右旗|