file.py 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130
  1. from fastapi import APIRouter, Depends, Request, UploadFile, File
  2. from fastapi.responses import FileResponse
  3. from sqlalchemy.orm import Session
  4. from pydantic import BaseModel
  5. from typing import Optional
  6. from database import get_db
  7. from models.total import PolicyFile
  8. from services.oss_service import oss_service
  9. import time
  10. import json
  11. import os
  12. router = APIRouter()
  13. @router.post("/oss/upload")
  14. async def upload(
  15. request: Request,
  16. file: UploadFile = File(...)
  17. ):
  18. """OSS上传 - 对齐Go版本函数名"""
  19. user = request.state.user
  20. if not user:
  21. return {"statusCode": 401, "msg": "未授权"}
  22. try:
  23. content = await file.read()
  24. file_url = oss_service.upload_file(content, file.filename)
  25. return {
  26. "statusCode": 200,
  27. "msg": "上传成功",
  28. "data": {"file_url": file_url}
  29. }
  30. except Exception as e:
  31. return {"statusCode": 500, "msg": f"上传失败: {str(e)}"}
  32. @router.post("/oss/shudao/upload_image")
  33. async def upload_image(
  34. request: Request,
  35. file: UploadFile = File(...)
  36. ):
  37. """上传图片"""
  38. user = request.state.user
  39. if not user:
  40. return {"statusCode": 401, "msg": "未授权"}
  41. try:
  42. content = await file.read()
  43. file_url = oss_service.upload_image(content, file.filename)
  44. return {
  45. "statusCode": 200,
  46. "msg": "上传成功",
  47. "data": {"image_url": file_url}
  48. }
  49. except Exception as e:
  50. return {"statusCode": 500, "msg": f"上传失败: {str(e)}"}
  51. class UploadJsonRequest(BaseModel):
  52. filename: str
  53. content: dict
  54. @router.post("/oss/shudao/upload_json")
  55. async def upload_ppt_json(
  56. request: Request,
  57. data: UploadJsonRequest
  58. ):
  59. """上传JSON文件 - 对齐Go版本函数名"""
  60. user = request.state.user
  61. if not user:
  62. return {"statusCode": 401, "msg": "未授权"}
  63. try:
  64. json_str = json.dumps(data.content, ensure_ascii=False)
  65. file_url = oss_service.upload_json(json_str, data.filename)
  66. return {
  67. "statusCode": 200,
  68. "msg": "上传成功",
  69. "data": {"file_url": file_url}
  70. }
  71. except Exception as e:
  72. return {"statusCode": 500, "msg": f"上传失败: {str(e)}"}
  73. @router.get("/oss/parse")
  74. async def parse_oss(url: str, request: Request):
  75. """OSS解析 - 对齐Go版本函数名"""
  76. user = request.state.user
  77. if not user:
  78. return {"statusCode": 401, "msg": "未授权"}
  79. try:
  80. decrypted_url = oss_service.parse_url(url)
  81. return {
  82. "statusCode": 200,
  83. "msg": "success",
  84. "data": {"url": decrypted_url}
  85. }
  86. except Exception as e:
  87. return {"statusCode": 500, "msg": f"解析失败: {str(e)}"}
  88. @router.get("/get_file_link")
  89. async def get_file_link(
  90. filename: str,
  91. request: Request
  92. ):
  93. """获取文件链接"""
  94. user = request.state.user
  95. if not user:
  96. return {"statusCode": 401, "msg": "未授权"}
  97. try:
  98. file_url = oss_service.get_signed_url(filename)
  99. return {
  100. "statusCode": 200,
  101. "msg": "success",
  102. "data": {"file_url": file_url}
  103. }
  104. except Exception as e:
  105. return {"statusCode": 500, "msg": f"获取失败: {str(e)}"}
  106. # 以下路由已在 total.py / chat.py 中实现(含完整逻辑),此处不重复定义:
  107. # - GET /download_file → routers/total.py(流式代理下载OSS)
  108. # - POST /policy_file_count → routers/total.py(view/download计数,字段 count_type)
  109. # - POST /save_ppt_outline → routers/chat.py(更新AIMessage.content)
  110. # - POST /save_edit_document → routers/chat.py(更新AIMessage.content)