我有以下型号。我成功地将数据插入到mysql数据库中,但我无法在索引页面中显示该图像。如何在我的模板中将mysql中的LargeBinary对象显示为图像?
class ginfo(db.Model):
id=db.Column(db.Integer,primary_key=True)
name=db.Column(db.String(20))
comment=db.Column(db.String(1000))
picdata=db.Column(db.LargeBinary)
我从页面获得了变量:
name=request.form['name']
comment=request.form['comment']
file=request.files['inputFile']
并将数据插入到mysql中:
signature=ginfo(name=name,comment=comment,picdata=file.read())
db.session.add(signature)
db.session.commit()
我用以下内容查询整个行和列:
result=ginfo.query.all()
return render_template('index.html',result=result)
我试图将数据显示如下:
{%for r in result%}
<div class="page-header">
<h1>{{r.name}}</h1>
</div>
<div class="well">
<p>{{r.comment}}</p>
</div>
<img src={base64.decodestring(r.picdata)}/>
{%endfor%}
答案 0 :(得分:1)
您可以解决此问题,例如使用路线将图像数据作为响应提供,例如:创建:
@app.route('/img/<int:img_id>')
def serve_img(img_id):
pass # look up via id, create response with appropriate mimetype
在模板中,请参阅此路线:
{% for r in result %}
<img src="{{ url_for('serve_img', img_id=r.id)}}"
{% endfor %}
另一种方法是使用data url将图像直接嵌入到您的回复中,基本上对您的数据进行base64编码并将其直接包含在您呈现的响应页面中。
我个人避免使用第二种方法,因为编码为base64会将大小增加大约30%,并且将图像嵌入为数据网址也会阻止客户端进行有效的缓存。