es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

¿Cómo publicar un archivo de imagen con una lista de cadenas usando FastAPI?

He intentado muchas cosas, pero parece que no funciona. Aquí está mi código:

@app.post("/mi-endpoint")
async def mi_funcion(
    languages: List[str] = ["en", "hi"], image: UploadFile = File(...)
):

La función funciona bien cuando elimino uno de los parámetros, pero con ambos parámetros, la lista recuperada sale como ["en,hi"], cuando quiero que sea ["en, "hi].

Ni siquiera estoy seguro de si mi enfoque es correcto, por lo tanto, la pregunta más amplia es: si este enfoque no es correcto, ¿cómo puedo enviar una lista y una imagen juntas?

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Parece que el problema en el código proporcionado es que el valor predeterminado para el parámetro languages está establecido en ["en", "hi"], lo que hace que la lista se combine en una sola cadena de "["en,hi"]" cuando el parámetro no se pasa como argumento.

    Para resolver este problema, puede establecer el valor predeterminado de languages en None y manejar este caso en el cuerpo de la función creando una nueva lista con los valores predeterminados si el parámetro languages no está presente en la solicitud.

    En cuanto a la cuestión más amplia de cómo enviar una lista y una imagen juntos, un enfoque es usar la clase FormData de la biblioteca fastapi. Aquí hay un ejemplo:

    from fastapi import FastAPI, File, UploadFile, Form
    
    app = FastAPI()
    
    @app.post ("/my-endpoint")
    async def my_func(
        image: UploadFile = File (...),
        languages: str = Form ("en,hi")
    ):
        language_list = languages.split (",")# dividir la cadena separada por comas en una lista de cadenas 
        # resto del cuerpo de la función
    

    En este ejemplo, estamos usando la clase Form para especificar que el parámetro languages debe ser un campo de formulario en lugar de un parámetro JSON. La clase FormData manejará automáticamente la conversión de campos de formulario a tipos Python.

    Al probar este punto final, puede usar una herramienta como el comando curl o un formulario web para enviar un archivo de imagen y una lista separada por comas de idiomas como campos de formulario.

Comments are closed.