1.Form
需要接收表单字段而不是json时可以使用Form
为了使用form需要先安装python-multipart
pip install python-ultipart
from fastapi import FastAPI, File, UploadFile
app = FastAPI()
@app.post("/files/")
async def create_file(file: bytes = File(...)):
return {"file_size": len(file)}
@app.post("/uploadfile/")
async def create_upload_file(file: UploadFile = File(...)):
return {"filename": file.filename}
表单参数的方式与Query或者Path相同。Form的详细使用可参考Query、Path、Cookie、Body。它直接继承自Body。
2. UploadFile
UploadFile
的属性:
filename
: 具有上载原始文件名的str
(例.myimage.jpg
).content_type
:content type
的字符串 (MIME type / media type) (例.image/jpeg
).file
:SpooledTemporaryFile
(a file-like object). 这是实际的Python文件,您可以将其直接传递给需要“类文件”对象的其他函数或库。
UploadFile
的 async
方法:
其实都是下面调用相应的文件方法(使用内部的'SpooledTemporaryFile`)。
write(data)
: 写data
(str
orbytes
) 到文件.read(size)
: 读size
(int
) bytes/characters 文件.seek(offset)
: 文件指针定位到文件中的字节offset
(int
)位置- 例.,
await myfile.seek(0)
文件将会定位到文件开始. - 如果您一次运行
await myfile.read()
然后需要再次读取内容,则此功能特别有用。
- 例.,
close()
: 关闭文件句柄