FastAPI 支持同时使用 FileForm 定义文件和表单字段。

接收上传文件或表单数据,要预先安装 python-multipart

例如,pip install python-multipart

导入 FileForm

  1. from fastapi import FastAPI, File, Form, UploadFile
  2. app = FastAPI()
  3. @app.post("/files/")
  4. async def create_file(
  5. file: bytes = File(), fileb: UploadFile = File(), token: str = Form()
  6. ):
  7. return {
  8. "file_size": len(file),
  9. "token": token,
  10. "fileb_content_type": fileb.content_type,
  11. }

定义 FileForm 参数

创建文件和表单参数的方式与 BodyQuery 一样:

  1. from fastapi import FastAPI, File, Form, UploadFile
  2. app = FastAPI()
  3. @app.post("/files/")
  4. async def create_file(
  5. file: bytes = File(), fileb: UploadFile = File(), token: str = Form() ):
  6. return {
  7. "file_size": len(file),
  8. "token": token,
  9. "fileb_content_type": fileb.content_type,
  10. }

文件和表单字段作为表单数据上传与接收。

声明文件可以使用 bytesUploadFile

警告

可在一个路径操作中声明多个 FileForm 参数,但不能同时声明要接收 JSON 的 Body 字段。因为此时请求体的编码为 multipart/form-data,不是 application/json

这不是 FastAPI 的问题,而是 HTTP 协议的规定。

小结

在同一个请求中接收数据和文件时,应同时使用 FileForm