gpt4 book ai didi

python - 从 fastapi 返回多个文件

转载 作者:行者123 更新时间:2023-12-03 16:02:36 24 4
gpt4 key购买 nike

使用 fastapi ,我不知道如何发送多个文件作为响应。例如,要发送单个文件,我将使用这样的东西

from fastapi import FastAPI, Response

app = FastAPI()

@app.get("/image_from_id/")
async def image_from_id(image_id: int):

# Get image from the database
img = ...
return Response(content=img, media_type="application/png")

但是,我不确定发送图像列表会是什么样子。理想情况下,我想做这样的事情:
@app.get("/images_from_ids/")
async def image_from_id(image_ids: List[int]):

# Get a list of images from the database
images = ...
return Response(content=images, media_type="multipart/form-data")

但是,这会返回错误
    def render(self, content: typing.Any) -> bytes:
if content is None:
return b""
if isinstance(content, bytes):
return content
> return content.encode(self.charset)
E AttributeError: 'list' object has no attribute 'encode'

最佳答案

压缩是最好的选择,它将在所有浏览器上获得相同的结果。您可以动态压缩文件。

import os
import zipfile
import StringIO


def zipfiles(filenames):
zip_subdir = "archive"
zip_filename = "%s.zip" % zip_subdir

# Open StringIO to grab in-memory ZIP contents
s = StringIO.StringIO()
# The zip compressor
zf = zipfile.ZipFile(s, "w")

for fpath in filenames:
# Calculate path for file in zip
fdir, fname = os.path.split(fpath)
zip_path = os.path.join(zip_subdir, fname)

# Add file, at correct path
zf.write(fpath, zip_path)

# Must close zip for all contents to be written
zf.close()

# Grab ZIP file from in-memory, make response with correct MIME-type
resp = Response(s.getvalue(), mimetype = "application/x-zip-compressed")
# ..and correct content-disposition
resp['Content-Disposition'] = 'attachment; filename=%s' % zip_filename

return resp


@app.get("/image_from_id/")
async def image_from_id(image_id: int):

# Get image from the database
img = ...
return zipfiles(img)

作为替代方案,您可以使用 base64 编码将(非常小的)图像嵌入到 json 响应中。但我不推荐它。

您也可以使用 MIME/multipart,但请记住,我是为电子邮件消息和/或 POST 传输到 HTTP 服务器而创建的。它从未打算在 HTTP 事务的客户端接收和解析。有些浏览器支持它,有些浏览器不支持。 (所以我认为你也不应该使用它)

关于python - 从 fastapi 返回多个文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61163024/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com