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

使用Streamlit file_uploader上传PDF至FastAPI报422错误求助

解决Streamlit上传PDF到FastAPI返回422错误的思路

问题根源

FastAPI的UploadFile和File依赖要求请求必须是multipart/form-data格式,而你当前的requests请求用普通payload传递参数,默认是application/x-www-form-urlencoded编码,无法被FastAPI正确解析,所以返回422错误。

具体修改方案

调整客户端的requests请求方式,分别用data传递普通字段,files传递文件,让请求自动以multipart/form-data格式发送:

uploaded_pdf = st.file_uploader('Upload a file', type="pdf")
    
url = "http://localhost:8000/file/upload"
if st.button("Upload PDF"):
    # 构造文件参数:键名要和FastAPI接口的uploaded_file参数一致
    files = {
        "uploaded_file": (uploaded_pdf.name, uploaded_pdf, "application/pdf")
    }
    # 普通表单字段用data传递
    data = {"username": username}
    response = requests.post(url, data=data, files=files)
    st.write(response)
    st.write(response.json())  # 可选:查看接口返回的详细信息

为什么之前的方法无效

  • 直接传uploaded_pdf.getvalue():把文件二进制内容放到普通表单字段里,FastAPI无法识别为UploadFile类型。
  • 直接传uploaded_pdf对象:requests无法正确序列化Streamlit的UploadedFile对象,导致请求格式不符合要求。

验证逻辑

FastAPI的docs页面测试能成功,是因为它自动生成了multipart/form-data格式的请求,和上面修改后的请求格式一致,所以接口能正常处理。

内容的提问来源于stack exchange,提问作者Sanjay

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.19 09:47:40