【问题标题】:How to return a bytes value in a cherry py request body如何在cherry py请求正文中返回字节值
【发布时间】:2017-08-02 16:08:19
【问题描述】:

我有一个包含 bytea 列的 postgres 表。此列包含一张图片。

SqlAlchemy 模型将此列定义为LargeBinary。我也尝试过使用BLOB,但它并没有改变任何事情。

我可以轻松地从数据库中检索一个值,我得到的是一个 bytes 类型的变量。

如何对字节数组进行 jsonify 处理?我需要 json 值,所以我可以像这样在cherrypy请求正文中返回它:

data = { 'id_image': image.id_image, 'image': image.value }

【问题讨论】:

  • JSON 不能包含控制字符,因此您必须以某种方式对其进行转义。最简单的方法是对原始二进制文件进行 base64 编码,但这需要 33% 的开销。为什么还需要以 JSON 格式返回二进制文件?您不能将图像返回为Content-Type: image/jpeg 或其他内容吗?
  • 您可以使用 base64 编码并将您的 blob 表示为 data URI
  • @Kinetic 请将我的回答标记为正确,如果它对你有帮助的话:)

标签: postgresql python-3.x sqlalchemy cherrypy


【解决方案1】:

我假设您需要在浏览器或类似软件中显示该图像。

通常您可以在将图像作为字符串嵌入网页时使用Data URI。现代浏览器知道如何将其解码。

另外我假设你有一个 PNG 图像。如果您的情况不同,请随时将image/png 更改为符合您需求的内容。

以下是使用 Python 生成数据 URI 的方法。

此示例使用 Python 3.6 语法:

import base64

img_id = image.id_image
img_base64_encoded = base64.b64encode(image.value).decode('ascii')
img_type = 'image/png'  # Use some smart image type guessing if applicable

img_data_uri = f'data:{img_type};base64,{img_base64_encoded}'

img_data = {
    'id': image.id_image,
    'data_uri': img_data_uri
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-07-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-20
    • 2020-08-08
    相关资源
    最近更新 更多