- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我想上传一个文件并将其存储在数据库中。我创建了一个 LargeBinary 列。
logo = db.Column(db.LargeBinary)
我读取上传的文件并将其存储在数据库中。
files = request.files.getlist('file')
if files:
event.logo = files[0].file.read()
这是将图像作为二进制文件存储在数据库中的正确方法吗?如何将二进制数据再次转换为图像显示?
最佳答案
如果您确实需要将图像存储在数据库中,那么是的,这是正确的。通常,文件存储在文件系统中,路径存储在数据库中。这是更好的解决方案,因为 Web 服务器通常有一种从文件系统提供文件的有效方法,而不是应用程序动态发送大量数据。
要提供图像,请编写一个获取图像数据并将其作为响应发送的 View 。
@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')
<img src="{{ url_for('event_logo', id=event.id }}"/>
最好使用正确的 mimetype 而不是 application/octet-stream
。
您还可以使用数据 uri 将图像数据直接嵌入到 html 中。这是次优的,因为每次呈现页面时都会发送数据 uri,而客户端可以缓存图像文件。
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)
<p>{{ obj.x }}<br/>
{{ obj.y }}</p>
<img src="data:;base64,{{ logo }}"/>
关于python - 提供存储在 SQLAlchemy LargeBinary 列中的图像,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31849494/
我想上传一个文件并将其存储在数据库中。我创建了一个 LargeBinary 列。 logo = db.Column(db.LargeBinary) 我读取上传的文件并将其存储在数据库中。 files
我想上传一个文件并将其存储在数据库中。我创建了一个 LargeBinary 列。 logo = db.Column(db.LargeBinary) 我读取上传的文件并将其存储在数据库中。 files
我尝试使用 Flask-SQLAlchemy 从 SQLite 读取 BLOB (LargeBinary) 对象,但收到此错误:TypeError: Must be string or read-on
我是一名优秀的程序员,十分优秀!