30 lines
1.1 KiB
Python
30 lines
1.1 KiB
Python
import os, uuid, qrcode
|
|
from PIL import Image
|
|
from fastapi import UploadFile
|
|
|
|
UPLOAD_DIR = os.getenv("UPLOAD_DIR", "/uploads")
|
|
|
|
def save_upload(file: UploadFile, sub_dir: str = "general") -> str:
|
|
"""파일을 저장하고 /uploads 기준 상대 경로 반환"""
|
|
ext = os.path.splitext(file.filename or "file")[1].lower() or ".jpg"
|
|
folder = os.path.join(UPLOAD_DIR, sub_dir)
|
|
os.makedirs(folder, exist_ok=True)
|
|
filename = f"{uuid.uuid4().hex}{ext}"
|
|
filepath = os.path.join(folder, filename)
|
|
with open(filepath, "wb") as f:
|
|
f.write(file.file.read())
|
|
return f"/uploads/{sub_dir}/{filename}"
|
|
|
|
def generate_qr(charger_id: str, domain: str) -> str:
|
|
"""QR 이미지를 저장하고 /uploads 기준 경로 반환"""
|
|
url = f"https://{domain}/report/{charger_id}"
|
|
qr = qrcode.QRCode(version=1, box_size=10, border=4)
|
|
qr.add_data(url)
|
|
qr.make(fit=True)
|
|
img = qr.make_image(fill_color="black", back_color="white")
|
|
folder = os.path.join(UPLOAD_DIR, "qr")
|
|
os.makedirs(folder, exist_ok=True)
|
|
filepath = os.path.join(folder, f"{charger_id}.png")
|
|
img.save(filepath)
|
|
return f"/uploads/qr/{charger_id}.png"
|