Отображение изображения Base64String с помощью Thymeleaf
Я храню jpg-изображения в базе данных (как массив байтов). Я хочу избежать попадания в файловую систему перед отображением на веб-странице.
модульные тесты показывают, что хранение и извлечение базы данных работают без повреждения. Fies можно извлечь из базы данных и преобразовать обратно в файл jpg
изображение было преобразовано в bytearray и сохранено в базе данных со следующим кодом:
public static byte[] getImageAsBytes(BufferedImage buffer) throws IOException
{
ByteArrayOutputStream baos = new ByteArrayOutputStream();
ImageIO.write(buffer, "jpg", baos);
baos.flush();
byte[] imageInByte = baos.toByteArray();
baos.close();
return imageInByte;
}
у меня есть класс ViewWrapperMediaImage, который содержит байт массив, извлеченный из базы данных. Этот класс также имеет метод, который преобразует ByteArray в строку base64.
package jake.prototype2.controller.viewwrapper;
import org.apache.commons.codec.binary.Base64;
import jake.prototype2.model.assessment.MediaImage;
import jake.prototype2.model.assessment.TestStructureException;
import jake.prototype2.model.structure.InterfacePersistenceBean;
public class ViewWrapperMediaImageCreate extends ViewWrapperTestContentElementCreate
{
private byte[] image;
protected String mediaFileName;
private static final long serialVersionUID = 4181515305837289526L;
public ViewWrapperMediaImageCreate(InterfacePersistenceBean persistenceBean) throws TestStructureException
{
....
}
}
public byte[] getImage()
{
return image;
}
public String generateBase64Image()
{
return Base64.encodeBase64URLSafeString(this.getImage());
}
public void setImage(byte[] image)
{
this.image = image;
}
public String getMediaFileName()
{
return mediaFileName;
}
public void setMediaFileName(String mediaFileName)
{
this.mediaFileName = mediaFileName;
}
}
моя плитка Thymeleaf затем вызывает метод преобразования generateBase64Image ():
<img th:src="@{'data:image/jpeg;base64,'+${vwNewTestContentElement.generateBase64Image()}}" />
Это не работает.
сгенерированный источник html выглядит следующим образом:
любой подсказки будут глубоко оценены
1 ответов
хорошо, оказывается, это очень легко, я решил в течение 2 минут задать вопрос, но я уверен, что у других будет тот же вопрос.
ответ: Не используйте URLSafe
Он работает с encodeBase64String()