2017-02-22 110 views
0

Привет, я хочу отобразить изображение в JSP и иметь возможность обрабатывать его внутри div, классы, надеюсь, как изображение ej: <img src="image from MySQ">.Как отображать изображение из MySQL (BLOB) в JSP?

У меня есть следующий код, но он показывает изображение в полноэкранном режиме.

<%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");%> 

ответ

0

Он делает именно то, что вы сказали сделать. Вы задаете весь тип содержимого ответа как "image", а затем напишите изображение на вывод. Вместо этого вы должны вернуть 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> 

, чтобы сделать это, вы должны следовать следующие шаги:

  1. извлечения исходного изображения (BLOB) из БД
  2. закодировать его в Base64
  3. Создайте страницу HTML со встроенным источником изображения и отправить его обратно в ответ

BTW, есть лучший способ - вы можете поместить свое изображение в файл в какой-нибудь промежуточной директории на своем веб-сервере и просто передать ссылку на него, как и любые другие статические изображения. Это спасет вас трафик и время загрузки страницы для следующего вызова одного и того же изображения. С внедренным исходным целым изображение будет передаваться каждый раз, в то время как оно может быть кэшировано как на сервере, так и в браузере.

Вам нужно только создать механизм для замены этого файла временного изображения, если изображение было обновлено в базе данных (просто не изменяйте имя этого кэшированного файла).
Отдых будет осуществляться через веб-сервер.

В общем случае, когда браузер запрашивает ресурс (изображение), он отправляет отметку времени, которую она имеет в кеше, , если отметка времени совпадает с сервером, возвращает сервер «304 - не изменен», и браузер может использовать изображение из кеша , Если он старше, то новая версия возвращается с сервера ...

0

Это мой код:

<%@ 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>