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

Java 如何在JSP中显示来自MySQL(BLOB)的图像?,java,mysql,jsp,Java,Mysql,Jsp,您好,我想在JSP中显示一个图像,并能够在div、classs中处理它,希望是图像ej: 我有以下代码,但它会全屏显示图像 <%Class.forName("com.mysql.jdbc.Driver").newInstance(); conn = DriverManager.getConnection(url, login, password); statement = conn.createStatement(); rs = statement.executeQuery("SELECT

您好,我想在JSP中显示一个图像,并能够在div、classs中处理它,希望是图像ej:

我有以下代码,但它会全屏显示图像

<%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”
,然后将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>

我的图片来自数据库
为此,您必须遵循以下步骤:

  • 从数据库中检索图像源(BLOB)
  • 将其编码为Base64
  • 使用嵌入的图像源创建HTML页面,并将其发送回

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

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

    通常,当浏览器请求资源(图像)时,它会发送缓存中副本的时间戳, 若时间戳和服务器相同,服务器返回“304-未修改”,浏览器可以使用缓存中的图像。如果是旧版本,则新版本将从服务器返回…

    这是我的代码:

    <%@ page import="java.sql.*" %> 
    <%@ page import='java.io.InputStream' %> 
    <%@ page import='java.io.OutputStream' %> 
    <%
        String login = "root";
        String password = "secret";
        String url = "jdbc:mysql://localhost/test";
        Connection conn = null;
        Statement statement = null;
        ResultSet rs = null;
        int nBytes = 0;
    %> 
    <html>
        <body>
            <%
                            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");
                        %>     
    <h1>My Image from DB</h1>
        <div>
           <img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgWETRHHFIDIDIDCNCNNRRLKJPPDJDdjfSSS==" alt="My Image from DB" />
        </div>
            <p> Imagen</p> 
            <a href="index.html">PRINCIPAL</a>
        </body>
    </html>
    
    
    我的图片来自数据库
    图像n