| 3384 | range_header = request.META.get("HTTP_RANGE", "").strip() |
| 3385 | |
| 3386 | def file_iterator(path, start=0, end=None, chunk_size=8192): |
| 3387 | with open(path, "rb") as f: |
| 3388 | f.seek(start) |
| 3389 | remaining = (end - start + 1) if end is not None else None |
| 3390 | while True: |
| 3391 | if remaining is not None and remaining <= 0: |
| 3392 | break |
| 3393 | bytes_to_read = min(chunk_size, remaining) if remaining is not None else chunk_size |
| 3394 | data = f.read(bytes_to_read) |
| 3395 | if not data: |
| 3396 | break |
| 3397 | if remaining is not None: |
| 3398 | remaining -= len(data) |
| 3399 | yield data |
| 3400 | |
| 3401 | if range_header and range_header.startswith("bytes="): |
| 3402 | # Parse Range header |