feat: upload form shows name for auth groups, file input with media type validation
- get_org_groups.dspy: show name if available, fallback to vendor_group_id - upload_asset.ui: change source_url from text textarea to file input (accept image/audio/video) - rl_upload.dspy: auto-detect asset_type from file extension, server-side media type validation
This commit is contained in:
parent
a0d4189cb8
commit
2f1974ae8f
@ -8,8 +8,10 @@ rows = []
|
||||
for g in groups:
|
||||
vid = g.get('vendor_group_id', '')
|
||||
vendor = g.get('vendor', '')
|
||||
name = g.get('name', '')
|
||||
if vid:
|
||||
rows.append({"value": vid, "text": f"{vendor} - {vid}"})
|
||||
display = f"{vendor} - {name}" if name else f"{vendor} - {vid}"
|
||||
rows.append({"value": vid, "text": display})
|
||||
|
||||
debug(f"get_org_groups: org={org_id}, count={len(rows)}")
|
||||
return json.dumps(rows, ensure_ascii=False)
|
||||
|
||||
@ -1,11 +1,27 @@
|
||||
|
||||
vendor_group_id = params_kw.get('vendor_group_id', '')
|
||||
source_url = params_kw.get('source_url', '')
|
||||
asset_type = params_kw.get('asset_type', 'Image')
|
||||
asset_type = params_kw.get('asset_type', '')
|
||||
name = params_kw.get('name', '')
|
||||
|
||||
if not vendor_group_id or not source_url:
|
||||
return json.dumps({"status": "error", "data": {"message": "请选择认证组合并提供素材URL"}}, ensure_ascii=False)
|
||||
return json.dumps({"status": "error", "data": {"message": "请选择认证组合并上传素材文件"}}, ensure_ascii=False)
|
||||
|
||||
# Validate media file type from path extension
|
||||
import os
|
||||
ext = os.path.splitext(source_url.split('?')[0])[1].lower() if source_url else ''
|
||||
media_map = {
|
||||
'.jpg': 'Image', '.jpeg': 'Image', '.png': 'Image', '.gif': 'Image', '.bmp': 'Image', '.webp': 'Image', '.svg': 'Image',
|
||||
'.mp4': 'Video', '.avi': 'Video', '.mov': 'Video', '.wmv': 'Video', '.flv': 'Video', '.mkv': 'Video', '.webm': 'Video',
|
||||
'.mp3': 'Audio', '.wav': 'Audio', '.aac': 'Audio', '.flac': 'Audio', '.ogg': 'Audio', '.wma': 'Audio', '.m4a': 'Audio',
|
||||
}
|
||||
detected_type = media_map.get(ext, '')
|
||||
if ext and not detected_type:
|
||||
return json.dumps({"status": "error", "data": {"message": f"不支持的文件类型: {ext},请上传图片、音频或视频文件"}}, ensure_ascii=False)
|
||||
if not asset_type and detected_type:
|
||||
asset_type = detected_type
|
||||
if not asset_type:
|
||||
asset_type = 'Image'
|
||||
|
||||
# If source_url is base64 data or local path, convert to public URL
|
||||
if source_url.startswith('data:') or (not source_url.startswith('http') and len(source_url) < 8000):
|
||||
|
||||
@ -51,11 +51,10 @@
|
||||
"required": true
|
||||
},
|
||||
{
|
||||
"uitype": "text",
|
||||
"uitype": "file",
|
||||
"name": "source_url",
|
||||
"label": "素材URL或base64",
|
||||
"rows": 4,
|
||||
"placeholder": "https://... 可公开访问的图片/视频URL\n或\ndata:image/png;base64,...",
|
||||
"label": "素材文件",
|
||||
"accept": "image/*,audio/*,video/*",
|
||||
"required": true
|
||||
},
|
||||
{
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user