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"