FastAPI通过Postman上传文件时触发422 Unprocessable Entity错误
FastAPI通过Postman上传文件时触发422 Unprocessable Entity错误
嗨,我来帮你搞定这个问题~你遇到的422错误,核心原因是Postman的请求格式和FastAPI后端的参数要求不匹配。
你的FastAPI接口用了UploadFile = File(...)参数,这个参数要求请求必须是multipart/form-data格式,并且要把文件放在名为file的表单字段里。但你现在用的是Postman的Binary模式,这种模式会把整个请求体直接作为文件内容发送,没有表单字段名,所以后端找不到file参数,就抛出了422错误。
正确的Postman操作步骤:
- 切换到请求的Body标签页
- 选中form-data选项(不要选Binary)
- 在表格的
Key列输入file(这个名字必须和你后端代码里的参数名完全一致) - 把
Key的类型从默认的Text改成File - 在
Value列点击「Select Files」,选择你要上传的文件 - 最后发送POST请求到接口地址
http://localhost:8000/vendor/ack/
确认你的后端代码是正确的
先帮你再核对一下代码,你的实现是没问题的:
main.py
from fastapi import FastAPI from api.endpoints.vendor import router app = FastAPI(title='Vendor Acknolegment API') app.include_router(router, prefix='/vendor', tags=['vendor confirmation']) if __name__ == '__main__': import uvicorn uvicorn.run("main:app", host="0.0.0.0", port=8000, log_level='info', reload=True)
vendor.py
from fastapi import APIRouter, status, File, UploadFile import os # 文件保存目录 UPLOAD_DIR = r"c:\ack" # 确保目录存在 os.makedirs(UPLOAD_DIR, exist_ok=True) router = APIRouter() # 上传文件接口 @router.post("/ack/", status_code=status.HTTP_201_CREATED) async def upload_ack(file: UploadFile = File(...)): file_location = os.path.join(UPLOAD_DIR, file.filename) with open(file_location, "wb") as f: f.write(await file.read()) return {"message": f"The file '{file.filename}' has been successfully saved into the server."}
按照上面的步骤操作后,应该就能成功上传文件啦!
备注:内容来源于stack exchange,提问作者Diego Rezende
相关产品推荐
相关产品推荐

