Отображение изображения 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()