from fastapi import APIRouter, UploadFile, File, Depends from typing import List from app.core.qcloud import qcloud_manager from app.core.config import settings from app.models.upload import UploadResponse, MultiUploadResponse from app.core.response import success_response, error_response, ResponseModel from app.api.deps import get_current_user from app.models.user import UserDB router = APIRouter() @router.post("/upload_merchant_auth_image", response_model=ResponseModel) async def upload_merchant_auth_image( image: UploadFile = File(...), current_user: UserDB = Depends(get_current_user) ): """上传商家认证图片""" if not image.content_type.startswith('image/'): return error_response(code=400, message="只能上传图片文件") try: folder = f"merchant_auth/{current_user.userid}" url = await qcloud_manager.upload_file(image, folder) return success_response(data=url) except Exception as e: return error_response(code=500, message=f"上传失败: {str(e)}") @router.post("/image", response_model=ResponseModel) async def upload_image( file: UploadFile = File(...), current_user: UserDB = Depends(get_current_user) ): """上传单张图片""" if not file.content_type.startswith('image/'): return error_response(code=400, message="只能上传图片文件") try: folder = f"uploads/{current_user.userid}" url = await qcloud_manager.upload_file(file, folder) return success_response(data=UploadResponse(url=url)) except Exception as e: return error_response(code=500, message=f"上传失败: {str(e)}") @router.post("/images", response_model=ResponseModel) async def upload_images( files: List[UploadFile] = File(...), current_user: UserDB = Depends(get_current_user) ): """上传多张图片""" if len(files) > 5: return error_response(code=400, message="最多同时上传5张图片") urls = [] try: for file in files: if not file.content_type.startswith('image/'): return error_response(code=400, message="只能上传图片文件") folder = f"uploads/{current_user.userid}" url = await qcloud_manager.upload_file(file, folder) urls.append(url) return success_response(data=MultiUploadResponse(urls=urls)) except Exception as e: return error_response(code=500, message=f"上传失败: {str(e)}") @router.get("/presigned-url") async def get_presigned_url( filename: str, current_user: UserDB = Depends(get_current_user) ): """获取预签名上传URL""" key = f"uploads/{current_user.userid}/{filename}" try: url = qcloud_manager.get_upload_url(key) return success_response(data={ "url": url, "key": key }) except Exception as e: return error_response(code=500, message=f"获取上传URL失败: {str(e)}")