AFNetworking 3.0 下載文件獲取進度progress

今天項目經理說了數(shù)據(jù)庫下載的時候只顯示文件從小到大增加太空洞,需要增加百分比顯示。那好吧,自己搞。 我也知道網上有demo,但是就想自己研究,而且我用的是AF3.0 ,可能很多方法都過時了。

1.獲取文件總大小

獲取文件總大小,我覺得AF既然是封裝了系統(tǒng)的URLSession,那它肯定是用了系統(tǒng)的方法來做的。于是我用totalAFURLSessionManager尋找,果然找到三個方法,分別是

- (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 直接給我輸出結果了,所以我直接刪除了前面添加的這個方法,直接在這里寫我需要的操作就可以了。

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

相關閱讀更多精彩內容

友情鏈接更多精彩內容