大文件斷點下載
阿新 • • 發佈:2017-07-14
comm 位置 key ros content byte 存在 -- style
(1)實現思路
在下載文件的時候不再是整塊的從頭開始下載,而是看當前文件已經下載到哪個地方,然後從該地方接著往後面下載。可以通過在請求對象中設置請求頭實現。
(2)解決方案(設置請求頭)
//2.創建請求對象
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
//2.1 設置下載文件的某一部分
// 只要設置HTTP請求頭的Range屬性, 就可以實現從指定位置開始下載
/*
表示頭500個字節:Range: bytes=0-499
表示第二個500字節:Range: bytes=500-999
表示最後500個字節:Range: bytes=-500
表示500字節以後的範圍:Range: bytes=500-
*/
NSString *range = [NSString stringWithFormat:@"bytes=%zd-",self.currentLength];
[request setValue:range forHTTPHeaderField:@"Range"];
(3)註意點(下載進度並判斷是否需要重新創建文件)
//獲得當前要下載文件的總大小(通過響應頭得到)
NSHTTPURLResponse *res = (NSHTTPURLResponse *)response;
//註意點:res.expectedContentLength獲得是本次請求要下載的文件的大小(並非是完整的文件的大小)
//因此:文件的總大小 == 本次要下載的文件大小+已經下載的文件的大小
self.totalLength = res.expectedContentLength + self.currentLength;
NSLog(@"----------------------------%zd",self.totalLength);
//0 判斷當前是否已經下載過,如果當前文件已經存在,那麽直接返回
if (self.currentLength >0) {
return;
}
大文件斷點下載