java - 如何在 JSP 中显示来自 MySQL (BLOB) 的图像?

标签 java mysql jsp

嗨,我想在 JSP 中显示图像,并能够在 div、类中处理​​它,希望作为图像 ej: <img src="image from MySQ"> .

我有以下代码,但它以全屏方式显示图像。

<%Class.forName("com.mysql.jdbc.Driver").newInstance();
conn = DriverManager.getConnection(url, login, password);
statement = conn.createStatement();
rs = statement.executeQuery("SELECT photo FROM contacts where contact_id='1'");
try {
    if (rs.next()) {
        response.setContentType("image");
        InputStream is = rs.getBinaryStream(1);
        OutputStream aux = response.getOutputStream();
        out.println("jajaja");
        byte[] buffer = new byte[4096];
        for (;;) {
            nBytes = is.read(buffer);
            if (nBytes == -1) {
                break;
            }
            aux.write(buffer, 0, nBytes);
        }
        is.close();
        aux.flush();
        aux.close();
    } else {
        throw new SQLException("image not found");
    }
    rs.close();
} catch (SQLException e) {
    out.println("Imagen no encontrada");
}
out.println("no se muestra");%>

最佳答案

它完全按照您的指示执行。 您将整个响应内容类型设置为“image”,然后将图像写入输出。相反,您必须返回具有“text/html”内容类型的 HTML 页面,如下所示:

<html>
  <body>
    <h1>My Image from DB</h1>
    <div>
       <img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgWETRHHFIDIDIDCNCNNRRLKJPPDJDdjfSSS==" alt="My Image from DB" />
    </div>
  </body>
 </html>

为此,您必须执行以下步骤:

  1. 从数据库检索图像源 (BLOB)
  2. 将其编码为 Base64
  3. 创建包含嵌入图像源的 HTML 页面并将其作为响应发回
<小时/>

顺便说一句,有一个更好的方法 - 您可以将图像放入网络服务器上某个暂存目录中的文件中,然后像任何其他静态图像一样传递指向它的链接。 它将节省您下次调用同一图像的流量和页面加载时间。通过嵌入源,每次都会传输整个图像,同时可以将其缓存在服务器和浏览器中。

如果数据库中的图像已更新,您只需制定一种机制来替换该临时图像文件(只需不要更改该缓存文件的名称)。
其余的将由网络服务器完成。

一般来说,当浏览器请求资源(图像)时,它会发送缓存中副本的时间戳, 如果时间戳与服务器相同,则服务器返回“304 - 未修改”,并且浏览器可以使用缓存中的图像。如果它较旧,则从服务器返回新版本...

关于java - 如何在 JSP 中显示来自 MySQL (BLOB) 的图像?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42402946/

相关文章:

java - Firebase 数据库使用 map 获取子项的特定值

java - Android:将 PreferenceFragment 与单个布局中的其他小部件结合起来

java - Avro - 如何为 SpecificCompiler 注册自定义 LogicalType

java - java中在构造函数中声明变量合法吗?例子

php - 如何关闭MySQLi连接?

java - 有没有办法从 JSP/Servlet 按原始顺序获取 POST 参数?

java - dhtmlxform.send 响应在警报提示中正确显示,但字符串比较不起作用

php - 在 ubuntu 12.04 上同时安装 mysql 和 mysqlnd

php - MySql 选择行数作为额外的列?

java - 比较 mp3/wav 文件之间的音量级别