文件上传使用File,UpFIle报错KeyError: <class 'pydantic.main.Body_upload_file_upload_upload_file_post'>

来源:4-4 单文件、多文件上传及参数详解

Pygo_

2023-11-14 22:48

2023/11/14 22:43:33 - E:\github\sqlai-api\deploy\__init__.py[line:90] - INFO - Web app server start initialize......
2023/11/14 22:43:33 - E:\github\sqlai-api\deploy\__init__.py[line:77] - INFO - Blueprint / is register
2023/11/14 22:43:33 - E:\github\sqlai-api\deploy\__init__.py[line:77] - INFO - Blueprint /ai is register
2023/11/14 22:43:33 - E:\github\sqlai-api\deploy\__init__.py[line:77] - INFO - Blueprint /upload is register
2023/11/14 22:43:33 - E:\github\sqlai-api\deploy\__init__.py[line:92] - INFO - Web app server end initialize......
2023/11/14 22:43:33 - E:\github\sqlai-api\deploy\__init__.py[line:90] - INFO - Web app server start initialize......
2023/11/14 22:43:33 - E:\github\sqlai-api\deploy\__init__.py[line:77] - INFO - Blueprint / is register
2023/11/14 22:43:33 - E:\github\sqlai-api\deploy\__init__.py[line:77] - INFO - Blueprint /ai is register
2023/11/14 22:43:33 - E:\github\sqlai-api\deploy\__init__.py[line:77] - INFO - Blueprint /upload is register
2023/11/14 22:43:33 - E:\github\sqlai-api\deploy\__init__.py[line:92] - INFO - Web app server end initialize......
INFO:     Started server process [8816]
INFO:     Waiting for application startup.
INFO:     Application startup complete.
INFO:     Uvicorn running on http://127.0.0.1:54321 (Press CTRL+C to quit)
INFO:     127.0.0.1:51422 - "GET /docs HTTP/1.1" 200 OK
INFO:     127.0.0.1:51422 - "GET /openapi.json HTTP/1.1" 500 Internal Server Error
ERROR:    Exception in ASGI application
Traceback (most recent call last):
  File "D:\anaconda\envs\openai\Lib\site-packages\uvicorn\protocols\http\h11_impl.py", line 408, in run_asgi
    result = await app(  # type: ignore[func-returns-value]
             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "D:\anaconda\envs\openai\Lib\site-packages\uvicorn\middleware\proxy_headers.py", line 84, in __call__
    return await self.app(scope, receive, send)
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "D:\anaconda\envs\openai\Lib\site-packages\fastapi\applications.py", line 1106, in __call__
    await super().__call__(scope, receive, send)
  File "D:\anaconda\envs\openai\Lib\site-packages\starlette\applications.py", line 122, in __call__
    await self.middleware_stack(scope, receive, send)
  File "D:\anaconda\envs\openai\Lib\site-packages\starlette\middleware\errors.py", line 184, in __call__
    raise exc
  File "D:\anaconda\envs\openai\Lib\site-packages\starlette\middleware\errors.py", line 162, in __call__
    await self.app(scope, receive, _send)
  File "D:\anaconda\envs\openai\Lib\site-packages\starlette\middleware\cors.py", line 83, in __call__
    await self.app(scope, receive, send)
  File "D:\anaconda\envs\openai\Lib\site-packages\starlette\middleware\cors.py", line 83, in __call__
    await self.app(scope, receive, send)
  File "D:\anaconda\envs\openai\Lib\site-packages\starlette\middleware\exceptions.py", line 79, in __call__
    raise exc
  File "D:\anaconda\envs\openai\Lib\site-packages\starlette\middleware\exceptions.py", line 68, in __call__
    await self.app(scope, receive, sender)
  File "D:\anaconda\envs\openai\Lib\site-packages\fastapi\middleware\asyncexitstack.py", line 20, in __call__
    raise e
  File "D:\anaconda\envs\openai\Lib\site-packages\fastapi\middleware\asyncexitstack.py", line 17, in __call__
    await self.app(scope, receive, send)
  File "D:\anaconda\envs\openai\Lib\site-packages\starlette\routing.py", line 718, in __call__
    await route.handle(scope, receive, send)
  File "D:\anaconda\envs\openai\Lib\site-packages\starlette\routing.py", line 276, in handle
    await self.app(scope, receive, send)
  File "D:\anaconda\envs\openai\Lib\site-packages\starlette\routing.py", line 66, in app
    response = await func(request)
               ^^^^^^^^^^^^^^^^^^^
  File "D:\anaconda\envs\openai\Lib\site-packages\fastapi\applications.py", line 1061, in openapi
    return JSONResponse(self.openapi())
                        ^^^^^^^^^^^^^^
  File "D:\anaconda\envs\openai\Lib\site-packages\fastapi\applications.py", line 1033, in openapi
    self.openapi_schema = get_openapi(
                          ^^^^^^^^^^^^
  File "D:\anaconda\envs\openai\Lib\site-packages\fastapi\openapi\utils.py", line 475, in get_openapi
    field_mapping, definitions = get_definitions(
                                 ^^^^^^^^^^^^^^^^
  File "D:\anaconda\envs\openai\Lib\site-packages\fastapi\_compat.py", line 471, in get_definitions
    return {}, get_model_definitions(
               ^^^^^^^^^^^^^^^^^^^^^^
  File "D:\anaconda\envs\openai\Lib\site-packages\fastapi\_compat.py", line 374, in get_model_definitions
    model_name = model_name_map[model]
                 ~~~~~~~~~~~~~~^^^^^^^
KeyError: <class 'pydantic.main.Body_upload_file_upload_upload_file_post'>





代码:

from fastapi import APIRouter, Path, Query, Request, Response, Form, Cookie, Header, status
from fastapi import File, UploadFile
from pydantic import BaseModel, Field
from typing import Optional, Union, List, Tuple, Dict


upload = APIRouter(prefix='/upload', tags=["文件上传"])


@upload.post('/file')
async def file_(file: bytes = File(..., title="file", description="小文件单文件上传")):
    return {"file": file}


@upload.post('/files')
async def files_(files: List[bytes] = File(..., title="files", description="小文件多文件上传")):
    for f in files:
        print(f, len(f))
    return {"files": len(files)}


@upload.post('/upload_files')
async def upload_files(files: List[UploadFile] = File(..., title="files", description="大文件多文件上传")):
    for f in files:
        content = await f.read()
        print(f, len(f), f.filename)
    return {"files": len(files)}
写回答 关注

0回答

还没有人回答问题,可以看看其他问题

高性能 FastAPI 框架入门精讲

FastAPI 框架快速上手开发,结合 API 交互文档逐个讲解核心模块的使用。

12443 学习 · 87 问题

查看课程

相似问题