如何从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
相关产品推荐
相关产品推荐

