Added embed support.

This commit is contained in:
sarah committed 2026-09-21 20:05:52 +02:00
1 parent 571dfd5378
commit ea1c444c49
4 files changed
+172 -33

No files matched your search

+33
View File
@@ -2,6 +2,8 @@ from __future__ import annotations
from pathlib import Path
from fastapi.responses import StreamingResponse
TextFileTypes = {"markdown", "text", "config", "html"}
@@ -40,3 +42,34 @@ def ParseRangeHeader(RangeHeader: str, FileSize: int) -> tuple[int, int]:
End = min(End, FileSize - 1)
return Start, End
def StreamBinaryFile(FilePath: Path, RangeHeader: str | None) -> StreamingResponse:
FileSize = GetFileSize(FilePath)
MimeType = GetMimeType(FilePath)
if RangeHeader:
Start, End = ParseRangeHeader(RangeHeader, FileSize)
ChunkLength = End - Start + 1
def IterateChunk():
with FilePath.open("rb") as SourceFile:
SourceFile.seek(Start)
yield SourceFile.read(ChunkLength)
Headers = {
"Content-Range": f"bytes {Start}-{End}/{FileSize}",
"Accept-Ranges": "bytes",
"Content-Length": str(ChunkLength),
}
return StreamingResponse(
IterateChunk(), status_code=206, media_type=MimeType, headers=Headers
)
def IterateFile():
with FilePath.open("rb") as SourceFile:
while Chunk := SourceFile.read(1024 * 1024):
yield Chunk
Headers = {"Accept-Ranges": "bytes", "Content-Length": str(FileSize)}
return StreamingResponse(IterateFile(), media_type=MimeType, headers=Headers)