diff --git a/elastic/views.py b/elastic/views.py index f99203c..a1b801b 100644 --- a/elastic/views.py +++ b/elastic/views.py @@ -14,6 +14,7 @@ from django.views.decorators.csrf import ensure_csrf_cookie from django.views.decorators.csrf import csrf_exempt, ensure_csrf_cookie from .es_connect import * from openai import OpenAI +from PIL import Image @require_http_methods(["GET", "POST"]) @@ -398,10 +399,29 @@ def confirm(request): return JsonResponse({"status": "error", "message": "数据不能为空"}, status=400) ensure_type_in_list(edited.get("数据类型")) + final_image_rel = image_rel + try: + if image_rel: + images_dir = os.path.join(settings.MEDIA_ROOT, "images") + os.makedirs(images_dir, exist_ok=True) + src_abs = os.path.join(settings.MEDIA_ROOT, image_rel) + base = os.path.splitext(os.path.basename(image_rel))[0] + webp_name = base + ".webp" + webp_abs = os.path.join(images_dir, webp_name) + with Image.open(src_abs) as im: + if im.mode in ("RGBA", "LA", "P"): + im = im.convert("RGBA") + else: + im = im.convert("RGB") + im.save(webp_abs, format="WEBP", quality=80) + final_image_rel = f"images/{webp_name}" + except Exception: + final_image_rel = image_rel + to_store = { "writer_id": str(request.session.get("user_id")), "data": json_to_string(edited), - "image": image_rel, + "image": final_image_rel, } ok = insert_data(to_store)