今天項目經理說了數(shù)據(jù)庫下載的時候只顯示文件從小到大增加太空洞,需要增加百分比顯示。那好吧,自己搞。 我也知道網上有demo,但是就想自己研究,而且我用的是AF3.0 ,可能很多方法都過時了。
1.獲取文件總大小
獲取文件總大小,我覺得AF既然是封裝了系統(tǒng)的URLSession,那它肯定是用了系統(tǒng)的方法來做的。于是我用total去AFURLSessionManager尋找,果然找到三個方法,分別是
- (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;
從字面意思來看,明顯第一個是文件上傳的方法,最后一個是斷點下載的方法,那就只有中間那個是我們需要的了。
2.計算百分比
你以為計算完百分比就完事了? 我也是這么以為的。
結果只有totalBytesWritten 的值是不斷增大的,totalBytesExpectedToWrite這個一直都是-1, 這尼瑪就很尷尬了,這是系統(tǒng)的方法呀。
然后我隨手把這個詞復制到搜索框,果然又一次是stackoverflow救了我,大概意思就是因為HTTP自己也不知道這個東西有多大,因為他的文件類型是未知的,需要給HTTP添加表頭
[request addValue:@"User-Agent" forHTTPHeaderField:@"Accept-Encoding"];
注意:這里的value 是你自己下載完成后NSURLResponse返回的參數(shù),不是隨便寫的。
3.最后
添加完成表頭以后,我一直以為沒用的downloadProgress 直接給我輸出結果了,所以我直接刪除了前面添加的這個方法,直接在這里寫我需要的操作就可以了。