Преглед на файлове

图片路径返回可以进行url访问的字段

AnlaAnla преди 1 месец
родител
ревизия
d96986d329
променени са 4 файла, в които са добавени 52 реда и са изтрити 40 реда
  1. 35 37
      Test/test01.py
  2. 1 1
      app/api/images.py
  3. 2 0
      app/main.py
  4. 14 2
      app/utils/scheme.py

+ 35 - 37
Test/test01.py

@@ -1,39 +1,37 @@
 import requests
 
-# 基础 URL
-base_url = 'http://192.168.31.243:7745/api/cards/card_list'
-
-# 查询参数 (query parameters)
-params = {
-    'skip': 0,
-    'limit': 100
-}
-
-# 请求头 (headers)
-headers = {
-    'accept': 'application/json'
-}
-
-try:
-    # 发送 GET 请求
-    response = requests.get(base_url, params=params, headers=headers)
-
-    # 检查响应状态码
-    response.raise_for_status()
-
-    # 打印响应内容 (JSON格式)
-    data = response.json()
-    print("Success! Response Data:")
-    print(data)
-
-    # 打印状态码
-    print(f"Status Code: {response.status_code}")
-
-except requests.exceptions.HTTPError as errh:
-    print(f"Http Error: {errh}")
-except requests.exceptions.ConnectionError as errc:
-    print(f"Error Connecting: {errc}")
-except requests.exceptions.Timeout as errt:
-    print(f"Timeout Error: {errt}")
-except requests.exceptions.RequestException as err:
-    print(f"An Error Occurred: {err}")
+
+base_url = 'http://192.168.31.243:7745/api/cards/query/3'
+
+def send(url):
+    # 请求头 (headers)
+    headers = {
+        'accept': 'application/json'
+    }
+
+    try:
+        # 发送 GET 请求
+        response = requests.get(base_url, headers=headers)
+
+        # 检查响应状态码
+        response.raise_for_status()
+
+        # 打印响应内容 (JSON格式)
+        data = response.json()
+        print("Success! Response Data:")
+        print(data)
+
+        # 打印状态码
+        print(f"Status Code: {response.status_code}")
+
+    except requests.exceptions.HTTPError as errh:
+        print(f"Http Error: {errh}")
+    except requests.exceptions.ConnectionError as errc:
+        print(f"Error Connecting: {errc}")
+    except requests.exceptions.Timeout as errt:
+        print(f"Timeout Error: {errt}")
+    except requests.exceptions.RequestException as err:
+        print(f"An Error Occurred: {err}")
+
+if __name__ == '__main__':
+    send(base_url)

+ 1 - 1
app/api/images.py

@@ -182,4 +182,4 @@ def get_image_file(id: int, db_conn: PooledMySQLConnection = db_dependency):
         raise HTTPException(status_code=500, detail="获取图片文件失败。")
     finally:
         if cursor:
-            cursor.close()
+            cursor.close()

+ 2 - 0
app/main.py

@@ -1,5 +1,6 @@
 
 from fastapi import FastAPI
+from fastapi.staticfiles import StaticFiles
 from fastapi.middleware.cors import CORSMiddleware
 from contextlib import asynccontextmanager
 import os
@@ -26,6 +27,7 @@ async def lifespan(main_app: FastAPI):
 
 app = FastAPI(title="卡片分数数据存储服务", lifespan=lifespan)
 
+app.mount("/Data", StaticFiles(directory="Data"), name="Data")
 app.add_middleware(
     CORSMiddleware,
     allow_origins=["*"],

+ 14 - 2
app/utils/scheme.py

@@ -1,5 +1,6 @@
 import json
 from datetime import datetime
+from pathlib import Path
 from typing import Optional, Dict, Any, List
 from pydantic import BaseModel, field_validator
 
@@ -8,7 +9,7 @@ from pydantic import BaseModel, field_validator
 
 class CardImageResponse(BaseModel):
     """用于API响应的图片数据模型 (主键为 id)"""
-    id: int  # 原 image_id
+    id: int
     card_id: int
     image_type: str
     image_name: Optional[str] = None
@@ -21,6 +22,17 @@ class CardImageResponse(BaseModel):
     class Config:
         from_attributes = True
 
+    @field_validator('image_path', mode='before')
+    @classmethod
+    def format_image_path(cls, v:str):
+        """将绝对文件路径转换为 'Data/filename.jpg' 格式的相对URL路径"""
+        if not isinstance(v, str) or not v:
+            return v
+        p = Path(v)
+        relative_path = f"{p.parent.name}/{p.name}"
+
+        return relative_path
+
     @field_validator('detection_json', 'modified_json', mode='before')
     @classmethod
     def parse_json_string(cls, v):
@@ -36,7 +48,7 @@ class CardImageResponse(BaseModel):
 
 class CardDetailResponse(BaseModel):
     """用于响应单个卡牌详细信息的模型 (主键为 id)"""
-    id: int  # 原 card_id
+    id: int
     card_name: Optional[str] = None
     created_at: datetime
     updated_at: datetime