eye*_*tea 12 python blob sqlalchemy jinja2 flask
我想上传一个文件并将其存储在数据库中.我创建了一个LargeBinary列.
logo = db.Column(db.LargeBinary)
Run Code Online (Sandbox Code Playgroud)
我读了上传的文件并将其存储在数据库中.
files = request.files.getlist('file')
if files:
event.logo = files[0].file.read()
Run Code Online (Sandbox Code Playgroud)
这是将图像作为二进制文件存储在数据库中的正确方法吗?如何将二进制数据再次转换为图像以显示它?
dav*_*ism 20
如果你绝对需要将图像存储在数据库中,那么是的,这是正确的.通常,文件存储在文件系统中,路径存储在数据库中.这是更好的解决方案,因为Web服务器通常具有从文件系统提供文件的有效方法,而不是动态地发送大量数据的应用程序.
要为图像提供服务,请编写一个获取图像数据并将其作为响应发送的视图.
@app.route('/event/<int:id>/logo')
def event_logo(id):
event = Event.query.get_or_404(id)
return app.response_class(event.logo, mimetype='application/octet-stream')
Run Code Online (Sandbox Code Playgroud)
<img src="{{ url_for('event_logo', id=event.id }}"/>
Run Code Online (Sandbox Code Playgroud)
优选使用正确的mimetype而不是application/octet-stream.
您还可以使用数据uri将图像数据直接嵌入到html中.这是次优的,因为每次呈现页面时都会发送数据uris,而客户端可以缓存图像文件.
from base64 import b64encode
@app.route('/event/<int:id>/logo')
def event_logo(id):
event = Event.query.get_or_404(id)
image = b64encode(event.logo)
return render_template('event.html', event=event, logo=image)
Run Code Online (Sandbox Code Playgroud)
<p>{{ obj.x }}<br/>
{{ obj.y }}</p>
<img src="data:;base64,{{ logo }}"/>
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
9154 次 |
| 最近记录: |