Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

389
Vistas
¿Cómo enviar múltiples archivos con solicitudes de Python al servidor FastAPI?

Tengo el siguiente punto final en mi servidor FastAPI:

 @app.post("/submit") async def submit(file1: List[UploadFile] = File(...), file2: List[UploadFile] = File(...), file3: List[UploadFile] = File(...)): # do something return 'hello'

Funciona como se esperaba si uso la interfaz de usuario de Swagger. Sin embargo, no puedo entender cómo enviar una solicitud POST a este punto final usando el módulo de requests de Python. Esto es lo que he probado:

 import requests headers = { 'accept': 'application/json', 'Content-Type': 'multipart/form-data', } files = [ ('file1', open('file1.zip', 'rb')), ('file2', open('file2.txt', 'rb')), ('file3', open('file3.rar', 'rb')), ] response = requests.post('http://localhost:8000/submit', headers=headers, files=files) print(response.text)

Pero estoy recibiendo un error:

 {"detail":"There was an error parsing the body"}
over 4 years ago · Santiago Trujillo
1 Respuestas
Responde la pregunta

0

Debe definir cada file como un parámetro separado en el punto final, por ejemplo, file1: UploadFile = File(...) , file2: UploadFile = File(...) , etc. (sin usar List ) o, preferiblemente, defina una List de archivos usando files: List[UploadFile] = File(...) , como se muestra a continuación (lo siguiente se puede usar para devolver los nombres de archivo de todos los archivos cargados).

 @app.post("/submit") async def submitUPP(files: List[UploadFile] = File(...)): # do something return {"Uploaded Files:": [file.filename for file in files]}

En el lado del cliente, debe enviar la lista de archivos usando la misma key que proporcionó en el punto final (es decir, files en el caso anterior) para cada archivo.

 files = [ ('files', open('file1.zip', 'rb')), ('files', open('file2.txt', 'rb')), ('files', open('file3.rar', 'rb')), ]

Es posible que también desee echar un vistazo a this y this answer.

Importante

Además de lo anterior, no se debe establecer el Content-Type en los encabezados en multipart/form-data cuando se usan archivos, sino dejar que las solicitudes de Python establezcan el Content-Type , además de multipart/form-data , Content-Type debe incluir la cadena boundary utilizada para separar cada parte del cuerpo en la carga útil de varias partes). Por favor, eche un vistazo a las respuestas aquí y aquí . Establecer el Content-Type la forma en que lo hace es la razón del error que encontró, es decir, {'detail': 'There was an error parsing the body'} . Por lo tanto, debe evitar establecer el Content-Type en los encabezados.

over 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda