来自数据库的Blob图像并在Jsp中显示

时间:2016-06-08 16:25:51

标签: java image jsp

                        <%-- 
                            Document   : Profile
                            Created on : Jun 5, 2016, 1:28:02 AM
                            Author     : User
                        --%>

                        <%@page import="ServletHolder.Database"%>
                        <%@page import="java.sql.*"%>
                        <%@page import="java.io.*"%>

                        <%
                                      response.setHeader("Cache-Control","no-cache");
                                      response.setHeader("Cache-Control","no-store");
                                      response.setDateHeader("Expires", 0);
                                      response.setHeader("Pragma","no-cache");


                                     HttpSession s=request.getSession();



                            try{
                            String a=(String)s.getAttribute("email");
                            String b=(String)s.getAttribute("password");

                            if((a.equals("a") && b.equals("b"))){

                            }else{
                                response.sendRedirect("index.jsp");
                            }
                            }catch(Exception e){
                                response.sendRedirect("index.jsp");
                            }

                            Connection con=Database.getConnection();
                            PreparedStatement pst;
                            ResultSet rs;
                            String c="shakil123@gmail.com";
                            String ah="";
                            Blob img;
                            byte[] imgdata=null;
                            try{

                            String al="select * from `uploadpic` where `email`='"+c+"'";
                            pst=con.prepareStatement(al);
                            rs=pst.executeQuery();

                            if(rs.next()){
                                ah=rs.getString("email");
                                img=rs.getBlob("pic");
                                imgdata=img.getBytes(1, (int)img.length());
                            }

                            }catch(Exception e){
                                ah=e.toString();
                            }

                               response.setContentType("image/gif");
                               OutputStream o = response.getOutputStream();
                             //  o.write(imgdata);
                              // o.flush(); 
                              // o.close();


                        %>

                        <%@page contentType="text/html" pageEncoding="UTF-8"%>
                        <!DOCTYPE html>
                        <html>
                            <head>
                                <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
                                <title>JSP Page</title>

                            </head>
                            <body><!-- onload="noBack()" onpageshow="noBack()">-->
                                <h1>Profile</h1>

                                <div span="12">

                                    <div sapan="9">

                                        <p><strong> Hello User Welcome!!!</strong></p>
                                        <img src="scrum-chart.jpg" alt="Mountain View" style="width:200px;"><br>
                                        <p><%=ah%><p>

                                            <img src="<%

                                            o.write(imgdata);
                                            o.flush();
                                            o.close();

                                                       %>" alt="Profile Picture" width="200" title="Profile Picture">

                                    </div>
                                    <div sapan="3">

                                        <p><strong> Advertisement</strong></p> 

                                    </div>

                                    </div>

                                <a href="Editprofile.jsp"> Edit Profile</a><br>


                                <form action="Logout" method="post">

                                    <input type="submit" value="Logout">

                                    </form>
                            </body>
                        </html>

但问题是,当我访问我的个人资料时,它只显示数据库中的图像。这只是检索到的图像显示在页面中,但其他代码不起作用,其他属性未显示在页面中.. ..

2 个答案:

答案 0 :(得分:0)

您的代码无法使用,因为您正在混合html页面和图像中的二进制数据。

您只需发送图像的二进制数据,而不是链接到图像。

要解决此问题,您需要创建另一个servlet,它将发送图像。

您还可以创建base64字符串并使用数据源:How to display Base64 images in HTML?

此代码的另一个问题:您可以使用电子邮件查询参数注入SQL。我假设您将编辑代码以使用查询参数email作为SQL参数。切勿将字符串连接与不安全参数一起使用。更好地使用PreparedStatement

String al="select * from `uploadpic` where `email`='"+c+"'";

<强>更新 我刚看到,你使用的是session而不是查询参数。但问题是一样的。

答案 1 :(得分:0)

该行

o.write(imgdata);

显示类似的数组[b185 ....

您应该将其转换为String。

创建Java类(例如BlobToString)并添加一个方法(转换)以将Blob转换为String。你可以用这个

public class BlobToString {
    public String convert(byte[] blob) {
        String str = "";
        //read bytes from ByteArrayInputStream using read method
        if (blob != null && blob.length > 0) {
            for (byte b : blob) {
                str = str + (char) b;
            }
        }
        return str;
     }
}

将java类BlobToString导入JSP

 <%@ page import="my.package.BlobToString" %>

创建新实例

 BlobToString blobToString = new BlobToString()

并替换

o.write(imgdata);

通过这一行

o.write(blobToString.convert(imgdata));