github.com/xxf098/lite-proxy@v0.15.1-0.20230422081941-12c69f323218/download/range.go (about)

     1  package download
     2  
     3  import "fmt"
     4  
     5  type Range struct {
     6  	Url       string
     7  	RangeFrom int64
     8  	RangeTo   int64
     9  }
    10  
    11  func (rng Range) toHeader(contentLength int64) string {
    12  	var ranges string
    13  	if rng.RangeTo != int64(contentLength) {
    14  		ranges = fmt.Sprintf("bytes=%d-%d", rng.RangeFrom, rng.RangeTo)
    15  	} else {
    16  		ranges = fmt.Sprintf("bytes=%d-", rng.RangeFrom) //get all
    17  	}
    18  	return ranges
    19  }
    20  
    21  func calcRange(part int64, len int64, url string) []Range {
    22  	ret := []Range{}
    23  	for j := int64(0); j < part; j++ {
    24  		from := (len / part) * j
    25  		var to int64
    26  		if j < part-1 {
    27  			to = (len/part)*(j+1) - 1
    28  		} else {
    29  			to = len
    30  		}
    31  
    32  		ret = append(ret, Range{Url: url, RangeFrom: from, RangeTo: to})
    33  	}
    34  	return ret
    35  }