| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130 |
- from fastapi import APIRouter, Depends, Request, UploadFile, File
- from fastapi.responses import FileResponse
- from sqlalchemy.orm import Session
- from pydantic import BaseModel
- from typing import Optional
- from database import get_db
- from models.total import PolicyFile
- from services.oss_service import oss_service
- import time
- import json
- import os
- router = APIRouter()
- @router.post("/oss/upload")
- async def upload(
- request: Request,
- file: UploadFile = File(...)
- ):
- """OSS上传 - 对齐Go版本函数名"""
- user = request.state.user
- if not user:
- return {"statusCode": 401, "msg": "未授权"}
-
- try:
- content = await file.read()
- file_url = oss_service.upload_file(content, file.filename)
- return {
- "statusCode": 200,
- "msg": "上传成功",
- "data": {"file_url": file_url}
- }
- except Exception as e:
- return {"statusCode": 500, "msg": f"上传失败: {str(e)}"}
- @router.post("/oss/shudao/upload_image")
- async def upload_image(
- request: Request,
- file: UploadFile = File(...)
- ):
- """上传图片"""
- user = request.state.user
- if not user:
- return {"statusCode": 401, "msg": "未授权"}
-
- try:
- content = await file.read()
- file_url = oss_service.upload_image(content, file.filename)
- return {
- "statusCode": 200,
- "msg": "上传成功",
- "data": {"image_url": file_url}
- }
- except Exception as e:
- return {"statusCode": 500, "msg": f"上传失败: {str(e)}"}
- class UploadJsonRequest(BaseModel):
- filename: str
- content: dict
- @router.post("/oss/shudao/upload_json")
- async def upload_ppt_json(
- request: Request,
- data: UploadJsonRequest
- ):
- """上传JSON文件 - 对齐Go版本函数名"""
- user = request.state.user
- if not user:
- return {"statusCode": 401, "msg": "未授权"}
-
- try:
- json_str = json.dumps(data.content, ensure_ascii=False)
- file_url = oss_service.upload_json(json_str, data.filename)
- return {
- "statusCode": 200,
- "msg": "上传成功",
- "data": {"file_url": file_url}
- }
- except Exception as e:
- return {"statusCode": 500, "msg": f"上传失败: {str(e)}"}
- @router.get("/oss/parse")
- async def parse_oss(url: str, request: Request):
- """OSS解析 - 对齐Go版本函数名"""
- user = request.state.user
- if not user:
- return {"statusCode": 401, "msg": "未授权"}
-
- try:
- decrypted_url = oss_service.parse_url(url)
- return {
- "statusCode": 200,
- "msg": "success",
- "data": {"url": decrypted_url}
- }
- except Exception as e:
- return {"statusCode": 500, "msg": f"解析失败: {str(e)}"}
- @router.get("/get_file_link")
- async def get_file_link(
- filename: str,
- request: Request
- ):
- """获取文件链接"""
- user = request.state.user
- if not user:
- return {"statusCode": 401, "msg": "未授权"}
-
- try:
- file_url = oss_service.get_signed_url(filename)
- return {
- "statusCode": 200,
- "msg": "success",
- "data": {"file_url": file_url}
- }
- except Exception as e:
- return {"statusCode": 500, "msg": f"获取失败: {str(e)}"}
- # 以下路由已在 total.py / chat.py 中实现(含完整逻辑),此处不重复定义:
- # - GET /download_file → routers/total.py(流式代理下载OSS)
- # - POST /policy_file_count → routers/total.py(view/download计数,字段 count_type)
- # - POST /save_ppt_outline → routers/chat.py(更新AIMessage.content)
- # - POST /save_edit_document → routers/chat.py(更新AIMessage.content)
|