0

I'm trying to display image from MySQL server on to the browser. But the following code works on Internet Explorer but not working on Chrome and Mozilla Firefox browser.

I'm new to JSP and I've already tried code from this question but didn't work .Displaying image in jsp from database

`<%@ include file="connect.jsp" %>
 <%@page import="java.sql.*,java.io.*"%>
 <%@ page import="java.sql.*,java.io.*,java.util.*" %> 
 <%

try{  

    int id = Integer.parseInt(request.getParameter("id"));
    Statement st=connection.createStatement();
            String strQuery = "select image from user where id="+id+"" ;
            ResultSet rs = st.executeQuery(strQuery);
            String imgLen="";
            if(rs.next())
    {
                imgLen = rs.getString(1);
            }  

            rs = st.executeQuery(strQuery);
            if(rs.next())
    {
                int len = imgLen.length();
                byte [] rb = new byte[len];
                InputStream readImg = rs.getBinaryStream(1);
                int index=readImg.read(rb, 0, len);  
                st.close();
                response.reset();
                response.getOutputStream().write(rb,0,len); 
                response.getOutputStream().flush();        
    }   
}
catch (Exception e){
    e.printStackTrace();
}%>
  • You'll need to set headers to indicate that what's being returned is an image and type (ie png, jpg, etc.) – Sloan Thrasher Apr 01 '19 at 15:25
  • I didn't get you. – Pavan Boro Apr 01 '19 at 16:01
  • 1
    When you send an image to the browser, you need to set the message headers to indicate the type of the message. By default the server will set headers indicating it's text/html. you will need to set a header indicating that the message is img/png or img/jpg or whatever type the image is so the browser knows how to handle the content of the message. Google html headers image type for more info. – Sloan Thrasher Apr 01 '19 at 20:22

1 Answers1

0

To retrieve multiple images from the SQL database and display in JSP pages you can do this:

<%
  int id =  Integer.parseInt(request.getParameter("imgid"));

  try {
    Connection con=DriverManager.getConnection("jdbc:sqlserver://XXXXX\\SQLEXPRESS14;databaseName=Student;user=XX;password=XXXXX");
    Statement st = con.createStatement();
    String strQuery = "select image from login_users where id='" + id + "'";
    ResultSet rs = st.executeQuery(strQuery);
    String imgLen="";
    if(rs.next()) {

      imgLen = rs.getString(1);
    }  
      rs = st.executeQuery(strQuery);
      if(rs.next()) {
      byte[] bytearray = new byte[4096];
      int size=0;
      InputStream sImage = rs.getBinaryStream(1);
      response.reset();
      response.setContentType("image/jpeg");
      while((size=sImage.read(bytearray))!= -1) {

        response.getOutputStream().write(bytearray,0,size);
      }
      response.getOutputStream().flush();
      response.getOutputStream().close();
      response.flushBuffer();
      sImage.close();
      rs.close();
    }
  }
  catch (Exception e) {

    e.printStackTrace();
  }
%>
sai
  • 3
  • 5