Получить изображение из BLOB-объекта через Hibernate (не JDBC) - PullRequest
8 голосов
/ 29 января 2012

Я нашел очень хорошее решение для извлечения изображений из db / blob благодаря Как извлекать и отображать изображения из базы данных на странице JSP?

Но это решение, которое использует соединение JDBC при каждом запросе изображения.

Я использую Spring 3 аннотации и Hibernate 3 .

Я пытался сделать то же самое с помощью своего 'imageService', который автоматически аннотируется в классе ImageServlet , но я получил nullPointerException , что означает, что может imageService не устанавливается путем внедрения зависимостей.

Есть ли способ как это решить? Я не люблю делать одно соединение JDBC по запросу изображения.

1 Ответ

6 голосов
/ 30 января 2012

Надеюсь, вы сохраняете изображение в таблице как тип BLOB (если не пытаетесь сделать это, так как это лучший метод). Предположим, у вас есть класс Person с image человека, хранящегося в БД. Если вы хотите отобразить это, просто добавьте свойство в вашем лице POJO, которое содержит изображение.

@Column(name="image")
@Blob
private Blob image;

Когда вы отобразите его, конвертируйте его в byte[] и покажите.

private byte[] toByteArray(Blob fromImageBlob) {
    ByteArrayOutputStream baos = new ByteArrayOutputStream();
    try {
      return toByteArrayImpl(fromImageBlob, baos);
    } catch (Exception e) {
    }
    return null;
  }



private byte[] toByteArrayImpl(Blob fromImageBlob, 
      ByteArrayOutputStream baos) throws SQLException, IOException {
    byte buf[] = new byte[4000];
    int dataSize;
    InputStream is = fromImageBlob.getBinaryStream(); 

    try {
      while((dataSize = is.read(buf)) != -1) {
        baos.write(buf, 0, dataSize);
      }    
    } finally {
      if(is != null) {
        is.close();
      }
    }
    return baos.toByteArray();
  }

Вы можете увидеть следующие примеры, чтобы узнать больше об этом.

  1. http://i -proving.com / 2006/08/23 / блобовым-и-спящий режим
  2. http://snehaprashant.blogspot.com/2008/08/how-to-store-and-retrieve-blob-object.html
  3. http://viralpatel.net/blogs/2011/01/tutorial-save-get-blob-object-spring-3-mvc-hibernate.html

Как вы можете видеть, есть несколько способов сделать это. Выберите подходящий для вас.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...