You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.14 17:39:49