Me enfrenté a la dificultad de probar api usando cartero. A través de la funcionalidad de carga de archivos swagger funciona correctamente, obtengo un archivo guardado en mi disco duro. Me gustaría entender cómo hacer esto con el cartero. Uso la forma estándar de trabajar con archivos que uso cuando trabajo con Django, matraz.
Body -> form-data: key=file, value=image.jpegPero con la API rápida , aparece un error.
127.0.0.1:54294 - "POST /uploadfile/ HTTP/1.1" 422 Unprocessable Entityprincipal.py
@app.post("/uploadfile/") async def create_upload_file(file: UploadFile = File(...)): img = await file.read() if file.content_type not in ['image/jpeg', 'image/png']: raise HTTPException(status_code=406, detail="Please upload only .jpeg files") async with aiofiles.open(f"{file.filename}", "wb") as f: await f.write(img) return {"filename": file.filename} También probé body -> binary: image.jpeg . pero obtuve el mismo resultado
Mi código:
from fastapi import FastAPI, UploadFile, File app = FastAPI() @app.post("/file/") async def create_upload_file(file: UploadFile = File(...)): return {"filename": file.filename}Como se indica en https://github.com/tiangolo/fastapi/issues/1653 , el nombre del parámetro para el archivo es el valor clave que debe usar. Antes estabas usando key=file y value=image.png (o lo que sea). En su lugar, FastAPI acepta file=image.png. De ahí el error, ya que el archivo es necesario, pero no está presente (al menos, la clave con ese nombre no está presente).
PD: lo probé con Postman v7.16.1
Como se mencionó en la respuesta, pude ver que falta la clave para el archivo cargado. Mencione la clave para el archivo en los parámetros del cuerpo como archivo .