reallife_asset/wwwroot/api/rl_virtual_upload.dspy
yumoqing 925f58b025 feat: 添加私域虚拟人素材功能
- init.py: 新增6个虚拟人函数(create/list/upload/sync等),注册到ServerEnv
- api_mapping: 新增create_group→CreateAssetGroup映射
- 外部API: 5个rl_virtual_*.dspy端点(创建组合/列表/上传/素材列表/状态)
- 前端API: 4个submit/get dspy端点(UI表单提交和数据获取)
- UI页面: 3个页面(创建组合/上传素材/查看素材)
- index.ui: 左侧导航新增虚拟人素材分区(3个按钮)
- load_path.py: RBAC新增virtual页面和api/%路径
- docs: api_downapp.md新增虚拟人API文档(5个端点)
2026-06-02 15:25:14 +08:00

35 lines
1.6 KiB
Plaintext

# ============================================================
# 上传虚拟人素材到私域素材组合
# 参数: vendor_group_id(必填), source_url(必填), asset_type(选填,默认Image), name(选填)
# curl 示例:
# curl -X POST 'https://ai.atvoe.com/reallife_asset/api/rl_virtual_upload.dspy' \
# -H 'Authorization: Bearer *** \
# -d 'vendor_group_id=group-xxx&source_url=https://example.com/image.jpg&asset_type=Image&name=虚拟人正面'
# ============================================================
vendor_group_id = params_kw.get("vendor_group_id", "")
source_url = params_kw.get("source_url", "")
asset_type = params_kw.get("asset_type", "Image")
name = params_kw.get("name", "")
if not vendor_group_id or not source_url:
return json.dumps({"status": "error", "data": {"message": "vendor_group_id和source_url为必填参数"}})
# Handle base64 data URL conversion
if source_url.startswith("data:") or (not source_url.startswith("http") and len(source_url) < 8000):
source_url = await b64media2url(request, source_url)
try:
org_id = (await get_userorgid()) or "0"
user_id = await get_user()
result = await rl_upload_virtual_asset(org_id, vendor_group_id, source_url, asset_type, name, user_id)
if result.get("success"):
return json.dumps({"status": "ok", "data": {
"id": result.get("id"),
"vendor_asset_id": result.get("vendor_asset_id"),
"status": result.get("status"),
}})
else:
return json.dumps({"status": "error", "data": {"message": result.get("message", "上传失败")}})
except Exception as e:
return json.dumps({"status": "error", "data": {"message": str(e)}})