You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

FastAPI中如何返回携带描述信息的图片?

三种实现FastAPI同时返回图片和描述的方案

方案1:返回包含Base64图片和描述的JSON

把图片字节编码为Base64字符串,和描述一起封装在JSON响应里,前端可直接解析展示。

修改后的代码示例:

import base64
from fastapi import APIRouter, Response, Annotated, Depends, APIKeyHeader
from your_module import PostInput, get_api_key_and_fetch_user_id, generate_post_for_user

router = APIRouter()

@router.post("/generate-post")
async def post(
    post_input: PostInput,
    user_id: Annotated[APIKeyHeader, Depends(get_api_key_and_fetch_user_id)],
):
    response = await generate_post_for_user(post_input.dict(), user_id)
    image_bytes = response["image"]
    # 将图片字节编码为Base64字符串
    image_base64 = base64.b64encode(image_bytes).decode("utf-8")
    # 返回包含描述和Base64图片的JSON
    return {
        "description": "Image of Patrick",
        "image": f"data:image/png;base64,{image_base64}"
    }

方案2:通过响应头传递描述

保持图片的二进制响应不变,把描述放在自定义HTTP响应头中,前端可读取响应头获取描述信息。

修改后的代码示例:

from fastapi import APIRouter, Response, Annotated, Depends, APIKeyHeader
from your_module import PostInput, get_api_key_and_fetch_user_id, generate_post_for_user

router = APIRouter()

@router.post("/generate-post")
async def post(
    post_input: PostInput,
    user_id: Annotated[APIKeyHeader, Depends(get_api_key_and_fetch_user_id)],
):
    response = await generate_post_for_user(post_input.dict(), user_id)
    image_bytes = response["image"]
    # 添加自定义响应头存储描述
    headers = {"X-Image-Description": "Image of Patrick"}
    return Response(content=image_bytes, media_type="image/png", headers=headers)

方案3:返回Multipart多部分响应

使用FastAPI的MultipartResponse,将图片和描述作为两个独立的部分返回,适合需要分开处理二进制和文本的场景。

修改后的代码示例:

from fastapi import APIRouter, Annotated, Depends, APIKeyHeader
from fastapi.responses import MultipartResponse
from your_module import PostInput, get_api_key_and_fetch_user_id, generate_post_for_user

router = APIRouter()

@router.post("/generate-post")
async def post(
    post_input: PostInput,
    user_id: Annotated[APIKeyHeader, Depends(get_api_key_and_fetch_user_id)],
):
    response = await generate_post_for_user(post_input.dict(), user_id)
    image_bytes = response["image"]
    
    # 构造多部分响应内容
    parts = [
        # 文本描述部分
        ("description", "Image of Patrick"),
        # 图片部分
        ("image", ("image.png", image_bytes, "image/png"))
    ]
    
    return MultipartResponse(parts)

内容的提问来源于stack exchange,提问作者Zeus

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.10 14:35:06