2017-12-16 40 views
0

oracleデータベースに格納された画像をJSPページに表示しようとしました。画像はBLOBのデータとして保存されます。ここで画像URLの代わりにjspページに画像を表示

<%@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パスを表示します画像。

どうすればよいですか?

答えて

-1

blobオブジェクトからバイトストリームを取得します。バイトストリームをベース64のエンコードされた文字列に変換します。次に、imgタグにbase64でエンコードされた文字列を使用します。ベース64のエンコード文字列html imageタグを使用できます。ブラウザが画像をレンダリングします。

次の点

streamでBLOBデータを変換する方法
  • /アレイのスタックオーバーフローの記事の多くを得るだろうベース64にエンコードされた文字列をバイトストリームに変換する方法
  • どのようにHTMLイメージタグにbase64でエンコードされた文字列を使用します。
+0

これを行わないでください。このアプローチは、ウェブブラウザに画像をキャッシュする機会を与えないので、非常に非効率的である。これはせいぜいアップロードされた画像の "プレビュー"機能に使用されるべきであり、確かに永続的な画像ではない。 – BalusC

+0

@BalusCベース64でエンコードされた画像はキャッシュされないことを理解しています。しかし、問題は(彼が提供したクエリに基づいて)単一のイメージを取得するためのものだったので、私はこの答えを提供しました。質問がスライドショーなどのものだった場合、私はこの回答を投稿していないでしょう。 – Rohit

関連する問題