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

如何从FastUI表单获取上传文件?接口参数该如何设置?

FastUI文件上传路由处理方案

1. 在/process_data路由获取上传文件

FastUI的FormFieldFile提交后,需要在POST路由中使用FastAPI的UploadFile或File参数接收,参数名必须和表单里的name='filefield'完全一致。修改后的路由代码如下:

from fastapi import UploadFile, File
from fastui import c, GoToEvent

@router.post("/process_data")
def validate_uploaded_data(filefield: UploadFile = File(...)):
    # 读取文件内容示例
    content = filefield.file.read()
    # 大文件可以逐行读取:
    # for line in filefield.file:
    #     process_line(line)
    
    # 处理完成后手动关闭文件(UploadFile也会自动关闭,手动更稳妥)
    filefield.file.close()
    
    return [c.FireEvent(event=GoToEvent(url='/'))]

2. ModelForm上传文件关闭问题的解决办法

用ModelForm时文件会自动关闭,无法后续读取,可通过两种方式处理:

方式一:模型中使用UploadFile类型

定义Pydantic模型时直接用UploadFile类型,FastAPI会保持文件对象处于打开状态:

from pydantic import BaseModel
from fastapi import UploadFile

class UploadModel(BaseModel):
    filefield: UploadFile

@router.post("/process_data")
def validate_uploaded_data(form_data: UploadModel):
    content = form_data.filefield.file.read()
    form_data.filefield.file.close()
    return [c.FireEvent(event=GoToEvent(url='/'))]

方式二:提前读取文件内容到内存

如果用普通bytes类型接收,可通过验证器提前把文件内容读入内存,避免文件关闭后无法访问(适合小文件):

from pydantic import BaseModel, validator

class UploadModel(BaseModel):
    filefield: bytes

    @validator('filefield')
    def read_file_content(cls, v):
        # 直接返回文件字节内容
        return v

@router.post("/process_data")
def validate_uploaded_data(form_data: UploadModel):
    # 直接使用form_data.filefield的字节内容
    print(form_data.filefield)
    return [c.FireEvent(event=GoToEvent(url='/'))]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.24 19:59:59