2017-08-02 33 views
0

我有一个postgres表,其中包含bytea列。此列包含一张图片。如何返回樱桃py请求正文中的字节值

SqlAlchemy模型将此列定义为LargeBinary。我也试过使用BLOB,但它没有改变一件事。

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

我该如何jsonify该字节数组?我需要的JSON值,所以我可以像这样在CherryPy的请求体返回它:

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

JSON不能包含控制字符,所以你必须以某种方式逃避它们。最简单的方法是对原始二进制进行64位编码,但这需要33%的开销。为什么你需要在JSON中返回二进制文件?你能不能像'Content-Type:image/jpeg'或其他东西一样返回图片吗? – univerio

+0

您可以使用base64编码并将您的blob表示为[数据URI](https://css-tricks.com/data-uris/) – webKnjaZ

+0

@Kinetic plz将我的回答标记为正确,如果它对您有帮助:) – webKnjaZ

回答

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 
}