Tengo este código muy simple que obtiene un diccionario como entrada y también devuelve un diccionario:
app = FastAPI() class User(BaseModel): user_name: dict @app.post("/") def main(user: User): ## some processing return userEstoy llamando a esto con el siguiente código de python:
import requests import json import pandas as pd df = pd.read_csv("myfile.csv") data = {} data["user_name"] = df.to_dict() headers = {'content-type': 'application/json'} url = 'http://localhost:8000/' resp = requests.post(url,data=json.dumps(data), headers=headers ) respAhora, quiero hacer algo similar, pero en lugar de enviar los datos con una solicitud de python, quiero cargar un archivo local, enviarlo a la API y recuperar un archivo .csv procesado.
Ahora tengo el siguiente código para subir un archivo:
from typing import Optional from fastapi import FastAPI from fastapi import FastAPI, File, UploadFile from pydantic import BaseModel from typing import List from fastapi.responses import HTMLResponse app = FastAPI() class User(BaseModel): user_name: dict @app.post("/files/") async def create_files(files: List[bytes] = File(...)): return {"file_sizes": [len(file) for file in files]} @app.post("/uploadfiles/") async def create_upload_files(files: List[UploadFile] = File(...)): return {"filenames": [file.filename for file in files]} @app.get("/") async def main(): content = """ <body> <form action="/files/" enctype="multipart/form-data" method="post"> <input name="files" type="file" multiple> <input type="submit"> </form> </body> """ return HTMLResponse(content=content) Esto me permite seleccionar y cargar un archivo: 
Pero cuando hago clic en enviar, soy redirigido a: http://localhost:8000/uploadfiles/ y obtengo el siguiente error:
{"detail":"Method Not Allowed"}¿Cómo puedo enviar el archivo para su procesamiento a la API y obtener un archivo como respuesta?
Copié tu código y me sale el mismo error. Después de revisar la documentación de FastAPI para solicitar archivos , se menciona que
Para recibir archivos cargados, primero instale python-multipart.
Por ejemplo, pip install
python-multipart.Esto se debe a que los archivos cargados se envían como "datos de formulario".
Después de instalar la biblioteca python-multipart , el código funcionó perfectamente.
Referencias: