VWED_server/routes/map_converter_api.py

49 lines
1.6 KiB
Python
Raw Normal View History

2025-09-12 16:15:13 +08:00
#!/usr/bin/env python
# -*- coding: utf-8 -*-
"""
地图格式转换API路由
提供SMAP到Scene华睿地图等格式转换的API接口
"""
from fastapi import APIRouter, UploadFile, File, Request
import os
import time
from routes.common_api import format_response, error_response
from utils.logger import get_logger
from services import interactive_converter
# 创建路由
router = APIRouter(prefix="/api/vwed-map-converter", tags=["地图格式转换"])
# 设置日志
logger = get_logger("app.map_converter_api")
@router.post("/smap-to-scene")
async def smap_to_scene(
smap_file: UploadFile = File(..., description="上传的smap地图文件"),
scene_file: UploadFile = File(None, description="可选参考scene文件")
):
"""
SMAP地图转Scene格式
支持可选参考scene文件自动完成场景丰富化
"""
try:
# 保存上传的文件到临时目录
temp_dir = "temp_uploads"
os.makedirs(temp_dir, exist_ok=True)
smap_path = os.path.join(temp_dir, f"{int(time.time())}_{smap_file.filename}")
with open(smap_path, "wb") as f:
f.write(await smap_file.read())
scene_path = None
if scene_file:
scene_path = os.path.join(temp_dir, f"{int(time.time())}_{scene_file.filename}")
with open(scene_path, "wb") as f:
f.write(await scene_file.read())
# 执行转换
result = interactive_converter.convert_smap_to_scene(smap_path, scene_path)
return format_response(data=result, message="SMAP地图转换成功")
except Exception as e:
logger.error(f"SMAP地图转换失败: {str(e)}")
return error_response(f"SMAP地图转换失败: {str(e)}", 500)