您好,登錄后才能下訂單哦!
本篇內容介紹了“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實現斷點續傳下載”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識可以關注億速云網站,小編將為大家輸出更多高質量的實用文章!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。