如何使 lambda 函数 return 成为包含 python 中的图像的 json

How to make lambda function return a json containing an image in python

我正在构建一个 Web 应用程序,它将一些信息发送到 API(AWS 的 API 网关),它会接收回图像和关于该图像的一些信息(字符串)。字符串和图像由写在 python.

中的 lambda 函数(AWS 服务)生成

正在阅读 我使用 base64 库将我的图像转换为 Base64 编码并将其作为我的 json 响应的一部分发送,但我收到 Object of type bytes is not JSON serializable,我该如何解决这个问题?

这个 的答案显示的代码与我的代码做的事情相同,但在该答案的评论中它说代码有效,而我的代码却没有,我是不是做错了什么?

这是我的代码:

def f():
    ...
    bio = BytesIO()
    plt.savefig(bio, format="png")

    bio.seek(0)
    my_base64_jpgData = base64.b64encode(bio.read())
    result["image"] = my_base64_jpgData
    return result

def lambda_handler(event, context):
    body = event["body"]

    result = handler(body)

    return {
        'statusCode': 200,
        'body': json.dumps(result)
    }

如果我在本地测试这个,我可以避免只做 json.dumps() 和 return result,但是在 lambda 函数中尝试相同的代码会使它失败,因为(我认为)发送响应之前的 lambda 函数对其应用 json.dumps。

编辑: 的答案也说做我所做的(使用 base64),但我不明白为什么它对我不起作用

b64encode returns 字节。要将其转换为 str,以下内容就足够了:

result["image"] = my_base64_jpgData.decode()

随后,您的代码可能是:

def f():
    ...
    bio = BytesIO()
    plt.savefig(bio, format="png")

    bio.seek(0)
    my_base64_jpgData = base64.b64encode(bio.read())
    result["image"] = my_base64_jpgData.decode()
    return result

def lambda_handler(event, context):
    body = event["body"]

    result = handler(body)

    return {
        'statusCode': 200,
        'body': json.dumps(result)
    }