gpt4 book ai didi

python - 在 FastAPI 中上传多部分形式的图像作为数据

转载 作者:行者123 更新时间:2023-12-05 05:33:25 25 4
gpt4 key购买 nike

我正在尝试编写用于图像上传的端点,它将只接受 base64 格式的图像。我已经阅读了如何从 FastAPI 中的请求获取文件并以这种方式实现它:

服务器端

@router.post("/v1/installation/{some_identifier}/image")
@db.create_connection
async def upload_installation_image(some_identifier: int, data: UploadFile = File(...)):
...
content = await data.read()
image_uuid = await save_image(installation.uuid, content, data.content_type)

return {"image_uuid": image_uuid}

它工作正常,但在这种情况下我需要以这种方式发送数据:

客户端

def test_upload_image(...):
...
response = session.post(
f"/v1/installation/{relink_serial}/image", files={"file": ("test_file_name.png", data, "image/png")}
)
...

但我希望能够像这样上传图片:

客户端

def test_upload_image(...):
...
response = session.post(
f"/v1/installation/{installation_uuid}/image", data=data, headers={"content-type": "image/png"}
)

我已经阅读了很多文章和其他问题,但他们都建议使用 UploadFile 并使用 filebody 参数将数据作为 json 发送。这甚至有可能像我展示的第二个测试那样只加载 1 个文件吗?

最佳答案

我找到了解决方案。我可以直接从请求对象中获取所有数据,而不是使用预定义的 FastAPI 类型,因此我的代码如下所示:

@router.post("/v1/installation/{some_identifier}/image")
@db.create_connection
async def upload_installation_image(some_identifier: int, request: Request):
...
content = await request.body()
image_uuid = await save_image(installation.uuid, content, content_type)

return {"image_uuid": image_uuid}

这正是我要找的,因为在我的例子中,客户端应用已经将整个文件发送给我。

关于python - 在 FastAPI 中上传多部分形式的图像作为数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/73862428/

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