Извлечение BLOB-объектов из базы данных с использованием спящего режима и отображение на веб-странице с помощью JSP - PullRequest
0 голосов
/ 30 августа 2018

Ответ, упомянутый здесь Это не работает для меня Я отправил байтовый массив в базу данных, которая хранится в виде BLOB-объекта в базе данных

File file = new File(filePath);
byte[] imageData = new byte[(int) file.length()];

Когда я пытаюсь получить объект BLOB-объекта из базы данных в этом байтовом массиве

Я получаю значение, подобное этому "[B @ 526d24d9". Я отправляю это значение на страницу jsp. (отправляю список больших двоичных объектов на страницу jsp, т. Е. Массив списка байтов) Сейчас я пытаюсь сделать это изображение на веб-странице, используя jsp. Но я не могу понять наиболее эффективный подход Один из подходов состоит в том, чтобы получить список больших двоичных объектов, обработать его и сохранить в файле, а затем извлечь из этого пути к файлу на странице jsp, используя тег Но я ищу более эффективный подход. Я пытаюсь что-то вроде этого

JSP код

<c:forEach items="${list}" var="list" varStatus="loop">
   <c:set var="l" value="${loop.index}" />

    <tr>
    <td><c:out value= "${l+1}" /></td>
      <td><c:out value="${list.name}" /></td>
      <td><c:out value="${list.size} MB" /></td>
      <td><c:out value="${list.preview}" /></td>
      <td><i class="material-icons">edit</i>
      <i class="material-icons" onclick="Remove()">delete</i></td>
    </tr>
  </c:forEach>

list.preview содержит байтовый массив "[B @ 526d24d9"

Ответы [ 2 ]

0 голосов
/ 30 августа 2018

Создайте поле String previewUrl в вашем классе сущностей. и внутри геттера напишите этот код.

public String getPreviewUrl() {
        String pu = Base64.encode(getPreview());
        setPreviewUrl(pu);
        return previewUrl;
    }

и в вашем коде jsp,

<td><img class='imagem_artigo' src='data:image/png;base64,${list.previewUrl}' alt='IMG DESC' width="200" height='200'></td>

Это будет работать

0 голосов
/ 30 августа 2018

имейте в виду, что данные, поступающие из вашей базы данных, являются фактическими байтами файла изображения. В JSP нужно вставить тег со ссылкой на изображение. Кроме того, вам понадобится контроллер, который просто выводит простое изображение в качестве ответа, а не встроенный в HTML.

Для шага 1 ваш JSP должен выглядеть примерно так:

<tr>
  <td><c:out value= "${l+1}" /></td>
  <td><c:out value="${list.name}" /></td>
  <td><c:out value="${list.size} MB" /></td>
  <td><img src="<c:out value="${list.previewUrl}" />"></td>
  <td><i class="material-icons">edit</i>
  <i class="material-icons" onclick="Remove()">delete</i></td>
</tr>

(вам нужно определить previewUrl и указать, что он указывает на контроллер, который может записывать данные изображения)

На втором шаге вам нужно будет создать такой контроллер, который будет выводить содержимое вашего байтового массива изображения в выходной поток HttpServletResponse.

В качестве последнего замечания: я немного озадачен первым фрагментом - вы извлекаете данные изображения из файла или из базы данных? (если последнее имеет место, размер байтового массива может быть вычислен неправильно)

...