Преобразование изображения в виде строки в byte [], а затем обратно в строку в кодировке Base64 - PullRequest
0 голосов
/ 15 декабря 2018

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

Мы создаем веб-приложение на JSF и Java для университета.Частично это загрузка логотипа, который должен храниться в базе данных в виде строки, а затем снова считываться из базы данных и отображаться на веб-сайте.Процесс отображения, кажется, работает просто отлично, но я просто не могу заставить загрузку работать.

Это код .xhtml для формы ввода на веб-сайте:

<h:form enctype="multipart/form-data">
    <h:inputFile id="i_logo" value="#{systemConfigBean.logo}"
        <f:ajax listener="#{systemConfigBean.upload}" render="@form"/>
    </h:inputFile>
</h:form>

выбранный файл читается Scanner в методе upload() базового компонента systemConfigBean.DTO organisationData, который передается на уровень DAO, имеет атрибут byte[], в котором логотип сохраняется следующим образом:

Scanner scanner = new Scanner(logo.getInputStream());
String fileContent = scanner.useDelimiter("\\A").next();
scanner.close();
organisationData.setLogo(fileContent.getBytes());

DAO преобразует его в строку Base64 и помещаетСтрока на базу данных.Строка создается следующим образом:

String encodedImage = Base64.getEncoder().encodeToString(organisation.getLogo())

До этого момента должна быть ошибка преобразования, потому что процедура отображения отсюда работает, если мы просто поместим закодированное изображение Base64 в базу данных.Так как мы можем ошибаться и декодирование и отображение могут быть некорректными, вот как мы обрабатываем эту часть:

В DAO:

organisationData.setLogo(Base64.getDecoder().decode(encodedImage))

В HTTP-сервлете:

response.setContentType(getServletContext().getMimeType(""));
response.setContentLength(logo.length);
response.getOutputStream().write(organisationData.getLogo()); 

Итак, мой вопрос: как нам получить правильное преобразование без изменения типа данных атрибута DTO logo или каких-либо других изменений в архитектуре?

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

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