通过flask/python在html中显示来自couchDB的图像附加

Posted

技术标签:

【中文标题】通过flask/python在html中显示来自couchDB的图像附加【英文标题】:display image attach from couchDB in html via flask/python 【发布时间】:2016-11-25 22:28:25 【问题描述】:

我想使用flask和python从couchdb获取图像附件,然后将图像传递给imgurl.html进行显示。 问题是我只得到这个:

couchdb.http.ResponseBody 对象在 0x103b9c0b8> 返回。

app.py

from flask import Flask, request, render_template, flash, request, url_for, redirect
import couchdb
import requests

app = Flask(__name__)

couch = couchdb.Server('http://127.0.0.1:5984/')

db = couch['test2']

doc = db.get_attachment('2', 'aboutme.jpg', default=None)
print("doc: ", doc)

@app.route('/')
def index():
    return render_template('index.html')


@app.route('/imgurl/')
def imgurl():
    return render_template('imgurl.html', doc = doc)


@app.route('/page/')
def page():

    return("Andrew Irwin")    
    #return render_template('index.html')

if __name__ == '__main__':
    app.run()

test.html

<!DOCTYPE html>
<html>
<head>
<meta name="viewport" content="width=device-width, initial-scale=1">

</head>
<body>
    <img src=" doc " id="imgslot" >

    <h1 id="h1id">  doc  </h1>
</body>
</html>

【问题讨论】:

【参考方案1】:

一种选择可能是对从 couchdb 返回的图像数据进行 base64 编码,并将编码后的数据作为字符串传递给您可以渲染它的模板。例如

img = db.get_attachment('2', 'aboutme.jpg', default=None).read()
img_b64 = base64.b64encode(img)

def imgurl():
   return render_template('imgurl.html', doc = img_b64)

然后在模板中:

<img src="data:image/png;base64, doc " id="imgslot" >

另一个取决于您的安全模型的选项可能是通过将图像 url 添加到图像标签来直接从 couchdb 提供图像,例如Getting url for an attachment

【讨论】:

非常感谢您的回答,非常感谢!在您回答之前,尽管我设法通过获取附件名称并将其附加到 url 的末尾来计算它,然后我将其传递给 html img src。现在我能够下载和显示图像,我试图反过来,从html上传couchdb。图像将成为画布。我有点卡住了! :(你能帮我一把吗? 我想我找到了答案。作为一个单独的问题发布可能是一个想法。 是的,如果您愿意,可以将其作为单独的问题发布。我现在尝试上传一个 html 画布,我试图将其转换为图像,然后将其作为附件上传并存储在沙发数据库中。 看看这里,看看这是否适合你***.com/questions/40852404/…【参考方案2】:

在看到@SHC 的答案之前,我自己想出了一个解决方案。 我所做的是检索附件的名称,然后将其附加到 URL 的末尾,例如“http:localhost:5984/dbName/docId/attachmentName”。 我将该网址传递给了html img src,然后它就可以工作了。谢谢@SHC 的回答。抱歉没早点看到。

【讨论】:

以上是关于通过flask/python在html中显示来自couchDB的图像附加的主要内容,如果未能解决你的问题,请参考以下文章

FLASK python web:MySQLdb._exceptions.OperationalError:(2002,“无法通过套接字'/tmp/mysql.sock'连接到本(代码

Flask:Python - 如何检查请求的IP地址[重复]

使用 Flask (python) 从 GAE 数据存储中提供图像

在另一个模板中显示来自 Django 视图的 HTML 表

Flask python学习第一章

如何在php中显示来自mysql数据库的html