changed to python312
This commit is contained in:
@ -61,18 +61,37 @@ async def serve_local_file(request: Request, path: str = Query(...)):
|
||||
"""Stream a local file with HTTP Range support (required for video seeking)."""
|
||||
file_path = Path(path)
|
||||
if not file_path.is_file():
|
||||
logger.warning(f"[serve_file] File not found: {path}")
|
||||
raise HTTPException(status_code=404, detail=f"File not found: {path}")
|
||||
|
||||
file_size = file_path.stat().st_size
|
||||
content_type = MIME_MAP.get(file_path.suffix.lower(), "application/octet-stream")
|
||||
|
||||
range_header = request.headers.get("range")
|
||||
|
||||
logger.info(
|
||||
f"[serve_file] {file_path.name} | size={file_size} | "
|
||||
f"type={content_type} | range={range_header or 'none'}"
|
||||
)
|
||||
|
||||
if content_type == "application/octet-stream":
|
||||
logger.warning(
|
||||
f"[serve_file] Unknown MIME type for extension '{file_path.suffix}' — "
|
||||
f"browser may fail to decode audio/video for '{file_path.name}'"
|
||||
)
|
||||
|
||||
if file_size == 0:
|
||||
logger.error(f"[serve_file] File is empty: {path}")
|
||||
raise HTTPException(status_code=422, detail=f"File is empty: {path}")
|
||||
if range_header:
|
||||
range_spec = range_header.replace("bytes=", "")
|
||||
range_start_str, range_end_str = range_spec.split("-")
|
||||
range_start = int(range_start_str) if range_start_str else 0
|
||||
range_end = int(range_end_str) if range_end_str else file_size - 1
|
||||
range_end = min(range_end, file_size - 1)
|
||||
try:
|
||||
range_spec = range_header.replace("bytes=", "")
|
||||
range_start_str, range_end_str = range_spec.split("-")
|
||||
range_start = int(range_start_str) if range_start_str else 0
|
||||
range_end = int(range_end_str) if range_end_str else file_size - 1
|
||||
range_end = min(range_end, file_size - 1)
|
||||
except (ValueError, TypeError) as e:
|
||||
logger.error(f"[serve_file] Malformed Range header '{range_header}': {e}")
|
||||
raise HTTPException(status_code=416, detail=f"Invalid Range header: {range_header}")
|
||||
content_length = range_end - range_start + 1
|
||||
|
||||
def iter_range():
|
||||
|
||||
Reference in New Issue
Block a user