在Flask应用中从MySQL返回图片到前端需要几个步骤。下面我将详细介绍完整实现方法。
首先确保你的MySQL表中有存储图片的BLOB类型字段:
CREATE TABLE images (
id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(255),
data LONGBLOB,
mime_type VARCHAR(50)
);
from flask import Flask, Response
import mysql.connector
from mysql.connector import Error
app = Flask(__name__)
# 数据库配置
db_config = {
'host': 'localhost',
'user': 'your_username',
'password': 'your_password',
'database': 'your_database'
}
@app.route('/image/<int:image_id>')
def get_image(image_id):
try:
# 连接数据库
connection = mysql.connector.connect(**db_config)
cursor = connection.cursor(dictionary=True)
# 查询图片数据
query = "SELECT data, mime_type FROM images WHERE id = %s"
cursor.execute(query, (image_id,))
record = cursor.fetchone()
if record:
# 返回图片响应
return Response(record['data'], mimetype=record['mime_type'])
else:
return "Image not found", 404
except Error as e:
print("Database error:", e)
return "Database error", 500
finally:
if connection.is_connected():
cursor.close()
connection.close()
if __name__ == '__main__':
app.run(debug=True)
你还需要一个上传图片到数据库的路由:
from flask import request
@app.route('/upload', methods=['POST'])
def upload_image():
if 'file' not in request.files:
return "No file uploaded", 400
file = request.files['file']
if file.filename == '':
return "No selected file", 400
try:
connection = mysql.connector.connect(**db_config)
cursor = connection.cursor()
# 读取文件数据
data = file.read()
mime_type = file.mimetype
# 插入数据库
query = "INSERT INTO images (name, data, mime_type) VALUES (%s, %s, %s)"
cursor.execute(query, (file.filename, data, mime_type))
connection.commit()
return "Image uploaded successfully", 200
except Error as e:
print("Database error:", e)
return "Database error", 500
finally:
if connection.is_connected():
cursor.close()
connection.close()
在前端HTML中,你可以这样显示图片:
<img src="/image/1" alt="Database Image">
其中1
是图片在数据库中的ID。
如果性能是关键考虑因素,可以考虑:
这种方法对于大量图片或高流量场景更合适。
希望这个解决方案对你有帮助!如果有任何问题或需要进一步优化,请随时提问。