parseRangeHeaderForPreview 解析Range请求头,用于预览功能
(rangeHeader string, fileSize int64)
| 378 | |
| 379 | // parseRangeHeaderForPreview 解析Range请求头,用于预览功能 |
| 380 | func parseRangeHeaderForPreview(rangeHeader string, fileSize int64) (int64, int64) { |
| 381 | if !strings.HasPrefix(rangeHeader, "bytes=") { |
| 382 | return 0, fileSize - 1 |
| 383 | } |
| 384 | |
| 385 | rangeHeader = rangeHeader[6:] // 移除 "bytes=" |
| 386 | parts := strings.Split(rangeHeader, "-") |
| 387 | if len(parts) != 2 { |
| 388 | return 0, fileSize - 1 |
| 389 | } |
| 390 | |
| 391 | var start, end int64 |
| 392 | var err error |
| 393 | |
| 394 | if parts[0] == "" { |
| 395 | // suffix bytes |
| 396 | suffix, err := strconv.ParseInt(parts[1], 10, 64) |
| 397 | if err != nil || suffix <= 0 { |
| 398 | return 0, fileSize - 1 |
| 399 | } |
| 400 | start = fileSize - suffix |
| 401 | end = fileSize - 1 |
| 402 | } else { |
| 403 | start, err = strconv.ParseInt(parts[0], 10, 64) |
| 404 | if err != nil || start < 0 { |
| 405 | start = 0 |
| 406 | } |
| 407 | |
| 408 | if parts[1] == "" { |
| 409 | // bytes=start- |
| 410 | end = fileSize - 1 |
| 411 | } else { |
| 412 | end, err = strconv.ParseInt(parts[1], 10, 64) |
| 413 | if err != nil || end >= fileSize { |
| 414 | end = fileSize - 1 |
| 415 | } |
| 416 | } |
| 417 | } |
| 418 | |
| 419 | return start, end |
| 420 | } |
| 421 | |
| 422 | // GetFileBodyContent godoc |
| 423 | // @Summary 获取文件版本内容 |
no outgoing calls
no test coverage detected