GWT - изображение из базы данных - PullRequest
18 голосов
/ 29 декабря 2010

На самом деле я работаю над GWT-сайтом.Теперь я застрял на том, как я должен отображать изображения, хранящиеся в базе данных на моем веб-сайте.

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

Я использую GWT в Java и Hibernate

Ответы [ 4 ]

12 голосов
/ 29 декабря 2010

Вот решение. Сначала вы должны закодировать байтовый массив с помощью 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); 
} 
4 голосов
/ 29 декабря 2010

Я не знаю, как работает GWT, хотя вы можете отобразить сервлет / контроллер, который возвращает resourceStream.Например, если вы отобразите сервлет «imageViewer», который принимает параметр imageId, запрос к изображению станет

/imageViewer?imageId=1234

Объект Hibernate будет иметь ссылку на большой двоичный объект, поэтому вы можете вернуть его.Ссылка на пользовательский интерфейс будет

<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();
1 голос
/ 13 мая 2011

Я использовал тот же подход, который предложил 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);
1 голос
/ 29 декабря 2010

В GWT есть Графический виджет .Вы не можете сделать это на стороне клиента, но вы можете позвонить RPC для связи с сервером.Тогда это простое приложение CRUD.На сервере подключитесь к базе данных с помощью hibernate и верните изображение клиенту или его URL-адресу, а на стороне клиента сделайте что-то вроде этого:Счастливое кодирование

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