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

FastAPI中使用bytes而非UploadFile时如何提取上传文件名

问题原因

你使用bytes类型作为File参数的接收类型时,FastAPI仅会将上传文件的二进制内容赋值给该参数,它本身是原生字节对象,不存在name属性,所以调用会报错。

解决方案

你已经在参数中注入了Request对象,可以直接从请求的multipart表单中提取对应文件字段的文件名,不需要修改原有bytes参数的定义,也无需调整客户端调用逻辑。

异步端点写法(推荐)

@app.post("/detect/")
async def predict(request: Request,  file: bytes = File(...)):
    # 解析请求中的multipart表单
    form = await request.form()
    # 获取file字段对应的文件名
    filename = form["file"].filename
    return f"Filename is {filename}"

同步端点写法

如果你的业务逻辑要求端点必须使用同步函数定义,可以通过run_in_threadpool处理表单解析:

from fastapi.concurrency import run_in_threadpool
import asyncio

@app.post("/detect/")
def predict(request: Request,  file: bytes = File(...)):
    # 同步场景下调用异步form解析方法
    form = asyncio.run(request.form())
    filename = form["file"].filename
    return f"Filename is {filename}"

注意:解析multipart表单需要提前安装依赖:pip install python-multipart

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 16:57:03