前言:
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ù)寫(xiě)入婶肩,并通過(guò)獲取的數(shù)據(jù)設(shè)置進(jìn)度條進(jìn)度。
<e>在結(jié)束服務(wù)器請(qǐng)求的代理方法中探入,關(guān)閉輸出流狡孔,釋放輸出流的指針。另外可能會(huì)需要打印錯(cuò)誤信息蜂嗽。
-
代碼實(shí)現(xiàn):
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ù)寫(xiě)入覆致,并通過(guò)獲取的數(shù)據(jù)設(shè)置進(jìn)度條進(jìn)度侄旬。
<f>在結(jié)束服務(wù)器請(qǐng)求的代理方法中,關(guān)閉輸出流篷朵,釋放輸出流的指針勾怒。另外可能會(huì)需要打印錯(cuò)誤信息。
<g>最后別忘了釋放會(huì)話對(duì)象(兩種方法均可)
2代碼實(shí)現(xiàn):