From 2cb71cc50d6bbf0a66d35f12bea6c57e82462238 Mon Sep 17 00:00:00 2001 From: Claude Date: Fri, 7 Aug 2026 11:17:11 +0800 Subject: [PATCH] =?UTF-8?q?fix:=20=E4=B8=8A=E4=BC=A0=E6=8E=A5=E5=8F=A3?= =?UTF-8?q?=E7=BC=BA=20request=20=E5=8F=82=E6=95=B0=E8=87=B4=20500?= =?UTF-8?q?=EF=BC=9BExcel=20=E5=AF=BC=E5=85=A5=20JSONResponse=20=E8=A7=A3?= =?UTF-8?q?=E6=9E=90=E5=B4=A9=E6=BA=83?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - modules/upload/router.py:三个上传端点补 request: Request 参数,permission_required 可正常取到当前用户 - modules/system/level/service.py:import_level 解析 upload_file 返回的 JSONResponse body 再取 filePath,修复 Excel 导入崩溃 - 实测:uploadImage 上传成功、level 导入 7 条成功;清理测试产生的重复 level 数据 Co-Authored-By: Claude --- modules/system/level/service.py | 8 +++++--- modules/upload/router.py | 7 ++++--- 2 files changed, 9 insertions(+), 6 deletions(-) diff --git a/modules/system/level/service.py b/modules/system/level/service.py index c9b506b..3465a08 100644 --- a/modules/system/level/service.py +++ b/modules/system/level/service.py @@ -39,6 +39,7 @@ # | 许可协议》附件为准。 # +====================================================================== import asyncio +import json import os import random import time @@ -173,12 +174,13 @@ def update_level_status(request, data: LevelStatusForm): # 导入Excel async def import_level(request, file): - # 读取上传的文件 + # 读取上传的文件(upload_file 返回 JSONResponse,需解析 body 判断业务结果) result = await upload.upload_file(file, ".xls|.xlsx") - if result.get('code') != 0: + body = json.loads(result.body) if result.body else {} + if body.get('code') != 0: return result # 本地文件地址 - relative_path = result['data']['filePath'] + relative_path = body['data']['filePath'] path = FASTAPI_UPLOAD_DIR + relative_path def _import(): diff --git a/modules/upload/router.py b/modules/upload/router.py index af09211..086bfe7 100644 --- a/modules/upload/router.py +++ b/modules/upload/router.py @@ -1,4 +1,5 @@ from fastapi import APIRouter, UploadFile, File +from starlette.requests import Request from core.middleware import check_demo from core.middleware import permission_required @@ -12,7 +13,7 @@ router = APIRouter() @router.post('/uploadImage', summary='上传图片') @permission_required("sys:upload:image") @check_demo -async def upload_image(file: UploadFile = File(...)): +async def upload_image(request: Request, file: UploadFile = File(...)): return await upload.upload_image(file) @@ -20,7 +21,7 @@ async def upload_image(file: UploadFile = File(...)): @router.post('/uploadFile', summary='上传文件') @permission_required("sys:upload:file") @check_demo -async def upload_file(file: UploadFile = File(...)): +async def upload_file(request: Request, file: UploadFile = File(...)): return await upload.upload_file(file) @@ -28,7 +29,7 @@ async def upload_file(file: UploadFile = File(...)): @router.post('/uploadEditImage', summary='富文本图片上传') @permission_required("sys:upload:image") @check_demo -async def upload_edit_image(file: UploadFile = File(...)): +async def upload_edit_image(request: Request, file: UploadFile = File(...)): result = await upload.upload_image(file) # 兼容富文本编辑器返回格式 if result.status_code == 200: