1. 程式人生 > >大文件斷點下載

大文件斷點下載

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;
    }

大文件斷點下載