ForcePilot/backend/package/yuxi/services/upload_utils.py

44 lines
986 B
Python

from pathlib import Path
import aiofiles
from fastapi import UploadFile
async def write_upload_to_buffer(
upload: UploadFile,
buffer,
*,
max_size_bytes: int,
too_large_message: str,
chunk_size: int = 1024 * 1024,
) -> int:
await upload.seek(0)
written = 0
while chunk := await upload.read(chunk_size):
written += len(chunk)
if written > max_size_bytes:
raise ValueError(too_large_message)
await buffer.write(chunk)
return written
async def write_upload_to_path(
upload: UploadFile,
dest: Path,
*,
max_size_bytes: int,
too_large_message: str,
mode: str = "wb",
chunk_size: int = 1024 * 1024,
) -> int:
async with aiofiles.open(dest, mode) as buffer:
return await write_upload_to_buffer(
upload,
buffer,
max_size_bytes=max_size_bytes,
too_large_message=too_large_message,
chunk_size=chunk_size,
)