【问题标题】:Displaying image in jsp page instead of image url [duplicate]在jsp页面中显示图像而不是图像url [重复]
【发布时间】:2018-05-30 11:03:17
【问题描述】:

我试图在 JSP 页面中显示存储在我的 oracle 数据库中的图像。图像存储为BLOB 数据。

这是我的代码:

<%@page import="utils.MyUtils"%>
<%@ page import="java.sql.*" %> 
<%@ page import="java.io.*" %> 
<% 

 Connection con = MyUtils.getStoredConnection(request);

 String strSQL = "SELECT IMAGE " 
 + "FROM CUSTOMER " 
 + "WHERE CUST_ID= 113"; 
 Statement stmt = con.createStatement(); 
 ResultSet rs = stmt.executeQuery(strSQL); 
 rs.next(); 

 response.setHeader("expires", "0"); 
 response.setContentType("jpeg"); 

 out.clear(); 
 OutputStream os = response.getOutputStream(); 
 os.write(rs.getBytes("IMAGE")); 
 out.flush(); 

%> 

这里是MyUtils类:

package utils;

import beans.CreateAcc;
import java.sql.Connection;

import javax.servlet.ServletRequest;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

import beans.UserAccount;

public class MyUtils {

    public static final String ATT_NAME_CONNECTION = "ATTRIBUTE_FOR_CONNECTION";

    private static final String ATT_NAME_USER_NAME = "ATTRIBUTE_FOR_STORE_USER_NAME_IN_COOKIE";

    // Store Connection in request attribute.
    // (Information stored only exist during requests)
    public static void storeConnection(ServletRequest request, Connection conn) {
        request.setAttribute(ATT_NAME_CONNECTION, conn);
    }

    // Get the Connection object has been stored in attribute of the request.
    public static Connection getStoredConnection(ServletRequest request) {
        Connection conn = (Connection) request.getAttribute(ATT_NAME_CONNECTION);
        return conn;
    }

    // Store user info in Session.
    public static void storeLoginedUser(HttpSession session, UserAccount loginedUser) {
        // On the JSP can access via ${loginedUser}
        session.setAttribute("loginedUser", loginedUser);
    }

    // Get the user information stored in the session.
    public static UserAccount getLoginedUser(HttpSession session) {
        UserAccount loginedUser = (UserAccount) session.getAttribute("loginedUser");
        return loginedUser;
    }
}

但是当我运行我的代码时,它只显示存储在我的 PC 中的图像的 URL 路径,而不是图像。

我该怎么办?

【问题讨论】:

    标签: java database jsp servlets blob


    【解决方案1】:

    从 blob 对象获取字节流。将字节流转换为 base 64 编码字符串。然后在 img 标签中使用那个 base 64 编码的字符串。您可以使用 base 64 编码字符串 html 图像标签。浏览器会渲染图片。

    以下几点你会收到很多关于堆栈溢出的帖子

    • 如何将 blob 数据转换为流/数组
    • 如何将字节流转换为 Base 64 编码字符串
    • 如何在 HTML 图片标签中使用 base 64 编码字符串。

    【讨论】:

    • 不要这样做。这种方法效率很低,因为这不会给网络浏览器任何缓存图像的机会。这最多应该用于上传图像的“预览”功能,当然不能用于持久图像。
    • @BalusC 我知道base 64 编码的图像不会被缓存。但由于问题是检索单个图像,(基于他提供的查询)我提供了这个答案。如果问题是幻灯片或类似的东西,我不会发布这个答案。
    猜你喜欢
    • 2011-07-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-03-13
    • 1970-01-01
    • 2012-09-29
    • 1970-01-01
    • 2019-09-29
    相关资源
    最近更新 更多