FastAPI是什么?
FastAPI是一种现代化的、高性能的Python Web框架。它根据标准化的Python类型提示来构建API的Web架构,并支持Python 3.6及以上版本。

FastAPI的主要特征如下:
- 速度极快,与NodeJS和Go相当;
- 开发速度大约增强200%到300%;
- 降低大概40%的开发人为因素造成的错误;
- 使用强大的在线编辑器进行代码可视化;
- 易于应用和学习;
- 代码简洁,避免编码重复;
- 生成互动式文档。
FastAPI应用
本文将演示如何应用FastAPI完成上传图片功能。以下是实现方式:
使用File完成文件上传
我们可以使用FastAPI的File函数来获取上传的文件。例如:
from fastapi import FastAPI, File
app = FastAPI()
@app.post("/files/")
async def create_file(file: bytes = File()):
return {"file_size": len(file)}
只需在路径操作函数中声明变量类型为bytes并使用File函数即可得到上传文件的内容。
如果要上传大量静态资源,可以特定参数类型为bytes:file: bytes=File()。这样可以将文件内容全部读入内存条中,更加适合静态资源。
使用File函数需要提前安装python-multipart。代码如下:
pip install python-multipart
使用UploadFile实现上传图片功能
对于大文件,不能将其所有内容读入到内存中。此时,我们可以使用FastAPI的UploadFile。代码如下:
from fastapi import FastAPI, UploadFile
app = FastAPI()
@app.post("/uploadfile/")
async def create_upload_file(file: UploadFile):
return {"filename": file.filename}
相较于bytes,UploadFile有以下优势:
- 不需要使用File()作为路径操作函数参数初始值;
- 不需要将文件所有信息加载到内存中;
- 能够获取文件的元数据信息;
- 该类别的变量可以像文档变量一样实际操作。
UploadFile具有以下属性:
- filename:文件名称;
- content_type:文件类型,例如:image/png;
- file:类文件对象,是标准化的Python文件对象。
除了这些元素属性外,UploadFile还有3个async方式:
- write:将str或是bytes写入文件;
- read:读取文件;
- seek:移动光标;
- close:关闭文件。
例如,要获取文件具体内容,可以使用以下代码:
contents = await myfile.read()
如果要设置上传图片是可选的,可以将默认值设为None。例如:
from typing import Union
from fastapi import FastAPI, File, UploadFile
app = FastAPI()
@app.post("/files/")
async def create_file(file: Union[bytes, None] = File(default=None)):
if not file:
return {"message": "No file sent"}
else:
return {"file_size": len(file)}
@app.post("/uploadfile/")
async def create_upload_file(file: Union[UploadFile, None] = None):
if not file:
return {"message": "No upload file sent"}
else:
return {"filename": file.filename}
上传多个文件
如果要上传多个文件,可以将参数类型设置为列表,列表元素是bytes或者UploadFile。例如:
from typing import List
from fastapi import FastAPI, File, UploadFile
app = FastAPI()
@app.post("/files/")
async def create_files(files: List[bytes] = File()):
return {"file_sizes": [len(file) for file in files]}
@app.post("/uploadfiles/")
async def create_upload_files(files: List[UploadFile]):
return {"filenames": [file.filename for file in files]}
综上所述,本文主要介绍了如何应用FastAPI完成上传图片功能,希望可以对大家有所帮助。
原创文章,作者:小编小本本,如若转载,请注明出处:https://www.benjiyun.com/yunzhujiyunwei/vps-yunwei/5768.html
