【问题标题】:How to show image from MySql database in Flask如何在 Flask 中显示 MySql 数据库中的图像
【发布时间】:2018-04-12 11:29:29
【问题描述】:

我有以下型号。我成功地将数据插入 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%}

【问题讨论】:

  • &lt;img src 引用了一个 URL,因此您可能需要另一个控制器来加载图像并照此提供它?
  • 您可以将图像保存在服务器的文件系统中。并将图像的路径存储在您的数据库中。
  • 我更喜欢将文件保存到数据库中。谢谢

标签: python mysql image flask


【解决方案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% 的大小,并且将图像嵌入为数据 url 也会阻止客户端进行有效缓存。

【讨论】:

  • 谢谢你的建议,我会试试看的:)
  • 嗨!,请您用真正的返回语句完成示例以在端点serve_img(img_id)中使用?我想实施你的建议。提前致谢。
猜你喜欢
  • 2018-01-24
  • 2012-10-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-26
  • 1970-01-01
  • 2014-12-11
相关资源
最近更新 更多