From 9365125969f3a1b84d5d9b9931f0dd415d9a224b Mon Sep 17 00:00:00 2001 From: Lars Date: Thu, 7 May 2026 11:02:43 +0200 Subject: [PATCH] feat: enhance media file delivery with range support and inline display - Added support for HTTP Range requests to enable partial downloads for media files, improving streaming capabilities. - Implemented a new response function to handle binary media responses, including content disposition for inline display. - Updated the media file download endpoint to utilize the new response handling, ensuring secure and efficient file delivery. - Enhanced type hints and imports for better code clarity and maintainability. --- backend/routers/exercises.py | 133 ++++++++++++++++++++++++++++++++--- 1 file changed, 123 insertions(+), 10 deletions(-) diff --git a/backend/routers/exercises.py b/backend/routers/exercises.py index 79ddcd6..415c92c 100644 --- a/backend/routers/exercises.py +++ b/backend/routers/exercises.py @@ -8,11 +8,13 @@ import hashlib import json import logging import os +import re from pathlib import Path -from typing import Any, Dict, List, Optional +from typing import Any, Dict, Iterator, List, Optional, Tuple +from urllib.parse import quote -from fastapi import APIRouter, HTTPException, Depends, Query, UploadFile, File, Form -from fastapi.responses import FileResponse +from fastapi import APIRouter, HTTPException, Depends, Query, Request, UploadFile, File, Form +from fastapi.responses import FileResponse, Response, StreamingResponse from pydantic import BaseModel, Field, model_validator from db import get_db, get_cursor, r2d @@ -1818,6 +1820,120 @@ def delete_exercise_variant( return {"ok": True} +def _content_disposition_inline(filename: Optional[str]) -> str: + """Inline-Darstellung im Browser (