中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

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

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

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

高平市| 静安区| 浙江省| 武邑县| 红原县| 红安县| 淮安市| 莎车县| 厦门市| 晋中市| 武夷山市| 天镇县| 灵璧县| 洛浦县| 桐柏县| 花莲市| 铅山县| 竹山县| 沧源| 榆社县| 巴林右旗| 遂昌县| 万年县| 寿光市| 巍山| 镇康县| 商水县| 布拖县| 聊城市| 如皋市| 称多县| 晋宁县| 鹤壁市| 龙游县| 博客| 凤凰县| 怀仁县| 汝阳县| 松桃| 胶南市| 五指山市|