You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Flask调用MySQL中LONGBLOB存储的图片无法显示问题排查

解决Flask读取MySQL LONGBLOB图片无法显示的问题

核心问题是send_file不能直接接收二进制字节数据,它需要类文件对象(比如BytesIO)来处理。以下是具体修正方案:

1. 修正Flask后端代码

先导入BytesIO,把从数据库读取的二进制数据包装成可读取的类文件对象:

from flask import Flask, request, send_file
from io import BytesIO
# 导入你的数据库驱动,示例用pymysql
import pymysql

app = Flask(__name__)

@app.route('/get_image', methods=['GET'])
def get_image():
    image_id = request.args.get('image_id')
    if not image_id:
        return "缺少image_id参数", 400

    # 数据库查询逻辑(根据你的实际配置修改)
    conn = pymysql.connect(
        host='localhost',
        user='你的用户名',
        password='你的密码',
        database='你的数据库名'
    )
    cursor = conn.cursor()
    # 假设表名为images,LONGBLOB字段名为image_blob
    cursor.execute("SELECT image_blob FROM images WHERE id = %s", (image_id,))
    result = cursor.fetchone()
    conn.close()

    if not result:
        return "图片不存在", 404

    image_data = result[0]
    # 将二进制数据转为BytesIO对象
    image_io = BytesIO(image_data)
    # 重置文件指针到开头,确保send_file能完整读取
    image_io.seek(0)
    
    # 注意:如果图片是JPG/GIF等格式,要对应修改mimetype,比如JPG用'image/jpeg'
    return send_file(image_io, mimetype='image/png')

2. 关键注意事项

  • MIME类型要匹配:如果数据库中的图片不是PNG格式,必须修改mimetype为对应值(如image/jpeg对应JPG)。建议在数据库额外存储图片格式字段,动态返回正确的MIME类型。
  • 禁止编码转换:确保从数据库读取的是原始bytes类型数据,不要做任何字符串编码/解码操作,否则会破坏图片二进制结构。
  • 增加参数校验:对image_id做非空判断、图片存在性校验,避免无效请求导致的报错。

3. HTML代码无需修改

你的HTML引用逻辑是正确的,只要后端接口正常返回图片数据,浏览器就能正常渲染:

<img src="http://127.0.0.1:5000/get_image?image_id=1"/>

内容的提问来源于stack exchange,提问作者parsecer

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.21 08:42:23