# ============================================================ # 上传虚拟人素材到私域素材组合 # 参数: 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)}})