Files
cmhub/apps/api/storage.py
T

30 lines
797 B
Python
Raw Normal View History

2026-07-02 22:41:37 +08:00
from __future__ import annotations
2026-07-08 21:24:59 +08:00
from typing import Callable
2026-07-02 22:41:37 +08:00
from uuid import uuid4
from django.core.files.base import ContentFile
from django.core.files.storage import default_storage
from django.utils import timezone
2026-07-08 21:24:59 +08:00
def save_generated_image(
image: bytes,
*,
url_builder: Callable[[str], str] | None = None,
request=None,
) -> str:
2026-07-02 22:41:37 +08:00
today = timezone.now()
path = (
"generated/images/"
f"{today:%Y/%m/%d}/"
f"{uuid4().hex}.png"
)
saved_path = default_storage.save(path, ContentFile(image))
url = default_storage.url(saved_path)
2026-07-08 21:24:59 +08:00
if url_builder is not None and url.startswith("/"):
return url_builder(url)
2026-07-02 22:41:37 +08:00
if request is not None and url.startswith("/"):
return request.build_absolute_uri(url)
return url