如何返回樱桃py请求正文中的字节值
问题描述:
我有一个postgres表,其中包含bytea
列。此列包含一张图片。如何返回樱桃py请求正文中的字节值
SqlAlchemy模型将此列定义为LargeBinary
。我也试过使用BLOB
,但它没有改变一件事。
我可以很容易地从数据库中检索一个值,我得到的是一个bytes
类型的变量。
我该如何jsonify该字节数组?我需要的JSON值,所以我可以像这样在CherryPy的请求体返回它:
data = { 'id_image': image.id_image, 'image': image.value }
答
我假设你需要显示在浏览器或类似软件的形象。
通常,在将图像作为字符串嵌入网页时,您可以使用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
}
JSON不能包含控制字符,所以你必须以某种方式逃避它们。最简单的方法是对原始二进制进行64位编码,但这需要33%的开销。为什么你需要在JSON中返回二进制文件?你能不能像'Content-Type:image/jpeg'或其他东西一样返回图片吗? – univerio
您可以使用base64编码并将您的blob表示为[数据URI](https://css-tricks.com/data-uris/) – webKnjaZ
@Kinetic plz将我的回答标记为正确,如果它对您有帮助:) – webKnjaZ