GWT - изображение из базы данных
Я действительно работаю на веб-сайте GWT.
Теперь я зациклился на том, как я должен отображать изображения, хранящиеся в базе данных на моем веб-сайте.
В принципе, у меня есть байты в моей базе данных, которые я получаю с помощью hibernate.
Теперь я должен, вероятно, создать... тег из этих данных, но я не знаю, как
Я использую GWT в Java и Hibernate
Ответы
Ответ 1
Вот решение. Сначала вы должны закодировать массив байтов, используя com.google.gwt.user.server.Base64Utils.toBase64 (byte []). Но этот метод не работает для IE 7. И IE8 имеет ограничение на 32 КБ.. IE9 не имеет этого предела.
вот метод на сервере
public String getImageData(){
String base64 = Base64Utils.toBase64(imageByteArray);
base64 = "data:image/png;base64,"+base64;
return base64;
}
Вот клиентский метод;
@Override
public void onSuccess(String imageData) {
Image image = new Image(imageData);
RootPanel.get("image").add(image);
}
Ответ 2
Я не знаю, как работает GWT, хотя вы можете сопоставить сервлет/контроллер, который возвращает resourceStream.
Например, если вы сопоставляете сервлет "imageViewer", который принимает параметр imageId, запрос на изображение станет
/imageViewer?imageId=1234
Объект Hibernate будет ссылаться на blob, поэтому вы можете вернуть его.
Ссылка на пользовательский интерфейс будет
<img src="/imageViewer?imageId=1234"/>
Обновление. Возможно, вы не сможете использовать модель, поскольку она должна возвращать изображение, вам нужен явный контроллер или сервлет, который возвращает данные потока.
В сервлете вы сделаете что-то вроде
// get reference to input stream
InputStream in = hibnerateObject.getImage();
// set MIME type etc
response.setContentType(mimeType);
OutputStream out = response.getOutputStream();
while ((len = in.read(buf)) >= 0)
out.write(buf, 0, len);
in.close();
out.close();
Ответ 3
В GWT есть Виджет изображений. Вы не можете сделать это на стороне клиента, но вы можете позвонить RPC для связи с сервером. Тогда это просто приложение CRUD. На сервере подключитесь к базе данных с гибернацией и верните изображение клиенту или его URL-адрес, а на стороне клиента сделайте что-то вроде этого:
@Override
public void onSuccess(String imageUrl) {
Image image = new Image(imageUrl);
RootPanel.get("image").add(image);
}
@Override
public void onFailure(Throwable caught) {
Window.alert(caught.getMessage());
}
Это все. Счастливое кодирование
Ответ 4
Я использовал тот же подход, что и предложенный Gursel Koca, но мог заставить его работать с использованием библиотеки Apache Base64, а не (по иронии судьбы) GWT Base64Utils
String base64 = Base64.encodeBase64String(array);
base64 = "data:image/"+type+";base64," + base64;
return base64;
Также обратите внимание, что если вы обновляете существующее изображение или место для замещения изображения, метод setURL перезапишет вашу таблицу стилей, поэтому сначала возьмите ее:
String styleName = profilePicture.getStyleName();
profilePicture.setUrl(base64String);
profilePicture.setStyleName(styleName);