2010-12-29 16 views
18

Aslında GWT tabanlı bir web sitesinde çalışıyorum. Şimdi web sitemde bir veritabanında saklanan görüntüleri nasıl görüntüleyeceğime takılıyorum.GWT - görüntü veritabanından

Temelde, hazırda bekletme özelliğini kullanarak getirdiğim veritabanımda bir grup arkadaşım var. Şimdi muhtemelen bu verilerin dışında bir ... etiketi oluşturmak gerekir, ama ben Java GWT kullanıyorum nasıl

bilir ve

+7

+1 .. Çünkü her bir gwt geliştiricisi bu problemin karşısına gelecek. –

cevap

11

İşte çözüm. Öncelikle bayt dizisini com.google.gwt.user.server.Base64Utils.toBase64 (byte []) kullanarak kodlamalısınız. Ancak bu yöntem IE 7. için çalışmıyor ve IE8 32kb limitine sahip .. IE9 bu sınıra sahip değil. Burada

İşte
public String getImageData(){ 
     String base64 = Base64Utils.toBase64(imageByteArray); 
     base64 = "data:image/png;base64,"+base64; 
     return base64; 
} 

istemci yöntemidir sunucuda yöntemdir;

@Override 
public void onSuccess(String imageData) {  
    Image image = new Image(imageData);  
    RootPanel.get("image").add(image); 
} 
+0

Bunu denemek istiyorum.Teşekkürler – Hons

+0

"image", bu çağrının RootPanel.get ("image"); ve uibinders ve eylem sevk içinde aynı şeyi nasıl yapılır. – Bennet

+0

@Bennet 'image' burada gwt projesinin html sayfasında oluşturulan div etiketinin id. –

1

GWT Image Widget yoktur Hazırda yoktur. İstemci tarafı yapamazsınız, ancak sunucuyla iletişim kurmak için RPC'u arayabilirsiniz. Sonra basit CRUD uygulamasıdır. sunucusunda hazırda ile veritabanına bağlanmak ve müşteriye Resmi dönmek veya URL var ve istemci tarafında böyle bir şey yapmak:

@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()); 
} 

hepsi bu. Mutlu kodlama

+0

Tamam, bu widget hakkında biliyordum, ama bir DB – Hons

+0

içinde bir Görüntü olduğu gibi bir URL gerektirir, bunu almalısınız ve diske (getBLOB) kaydedin ve daha sonra görüntü url ver . Aksi takdirde, görüntüyü diske kopyalamak zorunda kalmadan görüntüleyemezsiniz diye düşünüyorum –

+0

> Bence görüntüyü diske dokunmadan görüntüleyemiyorum - Evet, görüntüyü kopyalamaya gerek kalmadan görüntüleyebilirsiniz. disk. Tek yapmanız gereken bloğun UI'ye geri dönmesi. – ch4nd4n

4

Sana resourceStream döndüren bir servlet/kontrolör eşleyebilir olsa GWT nasıl çalıştığını bilmiyorum. Eğer ImageID param götüren bir servlet "imageviewer" eşlerseniz bunu dönebilirsiniz böylece Örneğin , blob atıfta olurdu

/imageViewer?imageId=1234 

hazırda nesnesi haline gelecek görüntüye talep ediyorum. UI üzerindeki Referans

<img src="/imageViewer?imageId=1234"/> 

Güncelleme olacaktır: Bunu görüntüyü döndürmek için olduğu gibi Model kullanmak mümkün olmayabilir, sen akışı veri döndürür açık bir kontrolör veya servlet gerekir. servlet'dir
Eğer Gürsel Koca önerdiği gibi ben aynı yaklaşımı kullanılır

// 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(); 
+0

Bu oldukça mantıklı görünüyor. Bir "normal" JSP veya PHP'de veya herhangi bir ana sayfada, bunun gibi bir şey yapmak zorunda kalacaksınız. Veya? – Hons

+0

Görünüm/şablon teknolojisine bakılmaksızın "tarayıcı" dan istekte bulunabilirsiniz. Onun basit bir HTTP isteği. Ajax da çalışmalı. – ch4nd4n

+0

Servletler aracılığıyla görüntülerin sunulması hakkında harika bir balusc öğreticisi: http://balusc.blogspot.com/2007/04/imageservlet.html Bu yaklaşım, Resim küçük aracıyla da çalışır. –

1

böyle bir şey yapsın ama sadece o (ironik) GWT Base64Utils

String base64 = Base64.encodeBase64String(array); 
base64 = "data:image/"+type+";base64," + base64; 
return base64; 
Apache Base64 kütüphane değil kullanarak işe alabilir

String styleName = profilePicture.getStyleName(); 
profilePicture.setUrl(base64String); 
profilePicture.setStyleName(styleName); 
:

Ayrıca varolan resim veya bir görüntü yer tutucu güncelliyoruz ise, setURL yöntemi stil sayfanızın üzerine, böylece ilk kapmak için emin olun unutmayın