今天項(xiàng)目經(jīng)理說(shuō)了數(shù)據(jù)庫(kù)下載的時(shí)候只顯示文件從小到大增加太空洞凿菩,需要增加百分比顯示。那好吧客情,自己搞。 我也知道網(wǎng)上有demo癞己,但是就想自己研究膀斋,而且我用的是AF3.0 ,可能很多方法都過(guò)時(shí)了痹雅。
1.獲取文件總大小
獲取文件總大小仰担,我覺(jué)得AF既然是封裝了系統(tǒng)的URLSession,那它肯定是用了系統(tǒng)的方法來(lái)做的绩社。于是我用total
去AFURLSessionManager
尋找摔蓝,果然找到三個(gè)方法,分別是
- (void)setTaskDidSendBodyDataBlock:(nullable void (^)(NSURLSession *session, NSURLSessionTask *task, int64_t bytesSent, int64_t totalBytesSent, int64_t totalBytesExpectedToSend))block;
- (void)setDownloadTaskDidWriteDataBlock:(nullable void (^)(NSURLSession *session, NSURLSessionDownloadTask *downloadTask, int64_t bytesWritten, int64_t totalBytesWritten, int64_t totalBytesExpectedToWrite))block;
- (void)setDownloadTaskDidResumeBlock:(nullable void (^)(NSURLSession *session, NSURLSessionDownloadTask *downloadTask, int64_t fileOffset, int64_t expectedTotalBytes))block;
從字面意思來(lái)看愉耙,明顯第一個(gè)是文件上傳的方法贮尉,最后一個(gè)是斷點(diǎn)下載的方法,那就只有中間那個(gè)是我們需要的了朴沿。
2.計(jì)算百分比
你以為計(jì)算完百分比就完事了猜谚? 我也是這么以為的。
結(jié)果只有totalBytesWritten
的值是不斷增大的赌渣,totalBytesExpectedToWrite
這個(gè)一直都是-1魏铅, 這尼瑪就很尷尬了,這是系統(tǒng)的方法呀坚芜。
然后我隨手把這個(gè)詞復(fù)制到搜索框览芳,果然又一次是stackoverflow救了我,大概意思就是因?yàn)镠TTP自己也不知道這個(gè)東西有多大鸿竖,因?yàn)樗奈募?lèi)型是未知的沧竟,需要給HTTP添加表頭
[request addValue:@"User-Agent" forHTTPHeaderField:@"Accept-Encoding"];
注意:這里的value 是你自己下載完成后NSURLResponse
返回的參數(shù),不是隨便寫(xiě)的千贯。
3.最后
添加完成表頭以后屯仗,我一直以為沒(méi)用的downloadProgress
直接給我輸出結(jié)果了,所以我直接刪除了前面添加的這個(gè)方法搔谴,直接在這里寫(xiě)我需要的操作就可以了魁袜。