我使用python flask创建了基于Web的应用程序,用于收集学生信息。
我创建了一个'学生'数据库,我通过创建'图像'表来收集学生资料,包括他们的照片 对于'photo'字段,我在mysql中使用BLOB数据类型。
这是我的代码:
<div class="form-group">
<%= f.label "Date:" %>
<%= f.date_field :starts_at, class: "form-control"%>
</div>
<div class="form-group">
<%= f.label "Time:" %>
<%= f.time_field :starts_at, class: "form-control"%>
</div>
我想将图像渲染为html文件,并希望在网页上显示 这是我的HTML代码:
import mysql.connector
import sys
from PIL import Image
import base64
import six
import io
import PIL.Image
import pymysql
from flask import Flask,render_template,request,flash
app=Flask(__name__)
app.secret_key = 'dont tell anyone'
@app.route('/')
def display_image():
db = mysql.connector.connect(user='root', password='######',
host='localhost',
database='students')
cursor=db.cursor()
sql1='select photo from images'
cursor.execute(sql1)
#db.commit()
data=cursor.fetchall()
#print type(data[0][0])
file_like=io.BytesIO(data[0][0])
img=PIL.Image.open(file_like)
db.close()
return render_template("home.html",data=file_like)
if __name__=="__main__":
app.run(debug=True)
网页上的结果如下:
我想在网页上显示图片本身,但它以二进制模式显示。
您能否请我解释一下这个问题或建议任何帮助我使用python flask从mysql检索图像并在网页上显示的文章,或者如果可能的话,您能否提供代码。
感谢你 带着敬意, Ramesh V
答案 0 :(得分:0)
您正在将流传递到模板,而不是图像。
Python编码,假设I / O将写入.jpg:
import base64
imgdata = base64.b64decode(file_like)
filename = 'some_image.jpg' # I assume you have a way of picking unique filenames
with open(filename, 'wb') as f:
f.write(imgdata)
来自@rmunn的回复:How to convert base64 string to image?
使用您的图像在您的数据库中存储扩展名是一个好主意,这样您就知道如何在退出时正确编码它们。实现内容管理系统会更好,您可以通过url获取文件,然后将这些网址存储在数据库中。预先做更多工作,但将流保存在数据库之外,并将文件系统保存在文件系统中,这些文件属于它们所属的文件。