@DenisShahbazyan

Отправить JSON и файл FastAPI?

Есть задача при регистрации пользователя (использую fastapi-users) отправить аватарку на сервер, а в БД записать путь к этой аватарке.
Но вот не могу понять как в одном эндпоинте обработать и Pydantic схему и файл...

Вот к примеру пытаюсь сделать так.
from pydantic import BaseModel
from fastapi import FastAPI, File, UploadFile


app = FastAPI()


class Item(BaseModel):
    name: str
    description: str


@app.post('/files')
async def create_file(
    item: Item,
    file: UploadFile = File(...)
):
    return {
        "item": item,
        "filename": file.filename,
    }


Но в свагере появляется такая ошибка:
{
  "detail": [
    {
      "type": "model_attributes_type",
      "loc": [
        "body",
        "item"
      ],
      "msg": "Input should be a valid dictionary or object to extract fields from",
      "input": "{\r\n  \"name\": \"string\",\r\n  \"description\": \"string\"\r\n}",
      "url": "https://errors.pydantic.dev/2.5/v/model_attributes_type"
    }
  ]
}

Ожидается словарь или объект, а передается строчка. Хочу чтоб и JSON нормально валидировался и файл сохранился на сервере.
  • Вопрос задан
  • 604 просмотра
Пригласить эксперта
Ответы на вопрос 1
@Everything_is_bad
Проблема в том, что BaseModel ожидает content type application/json, а при отправки файла будут multipart/form-data, где переменные передаются просто как key=value, а не оборачиваются в формат json
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы