feat(media): سقف آپلود ۳۰ مگابایت — لبه ۴۰MB، بک‌اند ۳۵MB، پیش‌چک ۳۰MB + رمزگذاری روی ترد تا رویدادلوپ قفل نشود

This commit is contained in:
aramesh-site deploy
2026-09-30 10:54:36 +00:00
parent b070125f51
commit 679195b590
3 changed files with 12 additions and 11 deletions
+6 -4
View File
@@ -22,6 +22,7 @@ from pydantic import BaseModel
from sqlalchemy import func
from sqlalchemy.exc import IntegrityError
from sqlalchemy.orm import Session
from starlette.concurrency import run_in_threadpool
from .. import models, schemas
from ..auth import create_access_token, get_current_admin, get_user_from_token, hash_password, oauth2_scheme, verify_password
@@ -530,8 +531,9 @@ async def upload_media(
detail=f"حجم فایل بیش از {settings.media_max_upload_mb} مگابایت است",
)
# هر ورودی قابل‌رمزگشایی (تصویر رایج/خاص، متحرک، ویدیو) → WebP نرمال
data, width, height = _normalize_media(data)
# هر ورودی قابل‌رمزگشایی (تصویر رایج/خاص، متحرک، ویدیو) → WebP نرمال — روی ترد،
# تا رمزگذاری فایل حجیم رویداد‌لوپ و بقیهٔ درخواست‌ها را قفل نکند
data, width, height = await run_in_threadpool(_normalize_media, data)
# نام خوانا: نام ارسالی فرم، وگرنه نام اصلی فایل بدون پسوند
display_name = (name or "").strip() or (file.filename or "").rsplit(".", 1)[0]
@@ -595,8 +597,8 @@ async def import_image(
detail=f"حجم تصویر بیش از {settings.media_max_upload_mb} مگابایت است",
)
# هدر Content-Type دروغ می‌گوید — خود بدنه رمزگشایی و به WebP نرمال می‌شود
data, width, height = _normalize_media(data)
# هدر Content-Type دروغ می‌گوید — خود بدنه رمزگشایی و به WebP نرمال می‌شود (روی ترد)
data, width, height = await run_in_threadpool(_normalize_media, data)
# نام خوانا از مسیر نشانی — بدون پارامترهای کوئری
url_name = urlparse(payload.url).path.rsplit("/", 1)[-1].rsplit(".", 1)[0]