最近博客项目有一个需求,博客前端通过mavon-editor上传图片,后端将其保存在数据库中,而这就出现了一个为问题,如何通过FastAPI传输这种文件,以及如何对它编码解码.
对这个问题,我们很容易显出一个很烂简单的做法,将图片直接压缩为base64格式,字符串传输存储,但这样的问题在于,传输的数据量大,处理起来也非常麻烦,而我们从fastapi的官网可以看到,fastapi的响应依赖starlette,那么我们可以再跳转到starlette,看到这一段:
StreamingResponse
Takes an async generator or a normal generator/iterator and streams the response body.
Have in mind that file-like objects (like those created by open()) are normal iterators. So, you can return them directly in a StreamingResponse.
大意是:使用一个异步的生成器或普通的生成器/可迭代对象作为这个响应主体.请记住,类文件对象(如open()创建的对象)是普通的迭代器。所以,你可以直接以流响应的形式返回它们。
这是非常有帮助的一段信息,让我们再看看官方的实例:
from starlette.responses import StreamingResponse #引入需要的文件
import asyncio
#定义一个异步生成器
async def slow_numbers(minimum, maximum):
yield('
- ')
for number in range(minimum, maximum + 1):
yield '
%d' % number