如何处理文件上传
在FastAPI中,文件上传是通过表单(form)提交的。你可以使用Form
来声明一个表单字段,如下所示:
from fastapi import FastAPI, File, Form, UploadFile
app = FastAPI()
@app.post("/files/")
async def create_file(file: bytes = File(...), fileb: UploadFile = File(...), token: str = Form(...)):
return {"file_size": len(file), "token": token}
上面的代码声明了一个POST
方法,它接收一个bytes
类型的文件和一个UploadFile
类型的文件,还有一个token
字符串字段。其中,bytes
类型的文件是直接从表单中读取的,而UploadFile
类型的文件是FastAPI封装的文件对象,它包含了一些文件的元信息,例如文件名、文件类型、文件大小等。
在这个例子中,我们可以使用file
和fileb
来访问这两个文件。你可以使用len(file)
来获取文件的大小,使用fileb.filename
来获取文件名。此外,我们还声明了一个token
字段,它是通过表单提交的一个字符串。
当然,你也可以通过FormData
来声明一个表单对象,例如:
from fastapi import FastAPI, File, Form, UploadFile
app = FastAPI()
@app.post("/files/")
async def create_file(form_data: FormData = Form(...)):
token = form_data["token"]
file = form_data["file"].file
fileb = form_data["file"]
return {"file_size": len(file.read()), "token": token}
在这个例子中,我们声明了一个FormData
对象form_data
,然后通过form_data["token"]
来获取token
字段,通过form_data["file"].file
来获取bytes
类型的文件,通过form_data["file"]
来获取UploadFile
类型的文件。你也可以使用len(file.read())
来获取文件的大小。