4.NSURLSessionDataTask實(shí)現(xiàn)文件下載(離線斷點(diǎn)續(xù)傳下載)

前言:
1.使用NSURLSessionDownloadTask滿足不這個(gè)需要離線斷點(diǎn)續(xù)傳的下載需求,所以這里就需要使用NSURLSessionDataTask的代理方法來(lái)處理下載大文件,并且實(shí)現(xiàn)離線斷點(diǎn)續(xù)傳。
因?yàn)镹SURLSessionDownloadTask和NSURLSessionDataTask分別都是NSURLSessionTask的上層繼承拓展。
比如NSURLSessionDownloadTask在代理方法中內(nèi)部實(shí)現(xiàn)了
 將文件邊下載邊移存到沙盒中,而使用NSURLSessionDataTask就需要自己完成這個(gè)過(guò)程了.
但是NSURLSessionDataTask可以實(shí)現(xiàn)離線斷點(diǎn)續(xù)傳。

2.實(shí)現(xiàn)離線的斷點(diǎn)續(xù)傳的基本思路:
  1、比如應(yīng)用程序下載15M的小視視頻,但是下載到5M的時(shí)候這個(gè)程序可能是因?yàn)橛脩粜枰渫顺龌蛘呤且馔獗罎⑼顺龌蛘呤菙嗑W(wǎng)了,導(dǎo)致還有10M沒(méi)有下載成功。
  2、為了能夠在重新啟動(dòng)程序之后還能夠繼續(xù)下載剩下的10M,需要在程序繼續(xù)下載的時(shí)候判斷和讀取本地緩存中是否存在已經(jīng)下載的數(shù)據(jù)和數(shù)據(jù)長(zhǎng)度,然后在該數(shù)據(jù)長(zhǎng)度之后繼續(xù)下載剩下的部分。

.1.NSURLSessionDataTask實(shí)現(xiàn)文件下載(未實(shí)現(xiàn)離線斷點(diǎn)續(xù)傳下載)

測(cè)試接口:用于測(cè)試代碼的API接口:[http://120.25.226.186:32812/resources/videos/minion_02.mp4]
 1-1、編程思路實(shí)現(xiàn)細(xì)節(jié):
    <a> 創(chuàng)建會(huì)話和請(qǐng)求,最后由會(huì)話創(chuàng)建請(qǐng)求任務(wù),并啟動(dòng)任務(wù)。
    <b>添加協(xié)議<NSURLSessionDataDelegate> ,設(shè)置代理,實(shí)現(xiàn)代理方法。
    <c>在獲取服務(wù)器返回的響應(yīng)代理方法中獲取文件名和要下載的文件長(zhǎng)度,拼接沙盒路徑,根據(jù)該路徑創(chuàng)建輸出流,開(kāi)啟輸出流。別忘了還需要設(shè)置接收服務(wù)器響應(yīng)。
    <d>在獲取服務(wù)器返回的數(shù)據(jù)代理方法中,不斷的使用輸出流將數(shù)據(jù)寫入,并通過(guò)獲取的數(shù)據(jù)設(shè)置進(jìn)度條進(jìn)度。
    <e>在結(jié)束服務(wù)器請(qǐng)求的代理方法中,關(guān)閉輸出流,釋放輸出流的指針。另外可能會(huì)需要打印錯(cuò)誤信息。
  1. 代碼實(shí)現(xiàn):


    image.png

2.NSURLSessionDataTask實(shí)現(xiàn)文件下載(實(shí)現(xiàn)離線斷點(diǎn)續(xù)傳下載)

實(shí)現(xiàn)的步驟:
 2-1、編程思路實(shí)現(xiàn)細(xì)節(jié):
    <a> 根據(jù)文件名拼接沙盒路徑,直接獲取該文件的屬性,如果沒(méi)有該文件,則返回的是nil,如果有該文件,則讀取文件其中的一個(gè)屬性:文件數(shù)據(jù)的長(zhǎng)度。
    <b>創(chuàng)建會(huì)話和可變請(qǐng)求,設(shè)置請(qǐng)求頭信息,告訴服務(wù)器返回的數(shù)據(jù)從已經(jīng)下載的文件長(zhǎng)度后面開(kāi)始下載,最后由會(huì)話創(chuàng)建請(qǐng)求任務(wù),并啟動(dòng)任務(wù)。
    <c>添加協(xié)議<NSURLSessionDataDelegate> ,設(shè)置代理,實(shí)現(xiàn)代理方法。
    <d>在獲取服務(wù)器返回的響應(yīng)代理方法中獲取文件名和要下載的文件長(zhǎng)度,拼接沙盒路徑,根據(jù)該路徑創(chuàng)建輸出流,開(kāi)啟輸出流。別忘了還需要設(shè)置接收服務(wù)器響應(yīng)。
    <e>在獲取服務(wù)器返回的數(shù)據(jù)代理方法中,不斷的使用輸出流將數(shù)據(jù)寫入,并通過(guò)獲取的數(shù)據(jù)設(shè)置進(jìn)度條進(jìn)度。
    <f>在結(jié)束服務(wù)器請(qǐng)求的代理方法中,關(guān)閉輸出流,釋放輸出流的指針。另外可能會(huì)需要打印錯(cuò)誤信息。
    <g>最后別忘了釋放會(huì)話對(duì)象(兩種方法均可)

2代碼實(shí)現(xiàn):

image.png
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容