2016-12-02 1 views
0

quand je mis en œuvre comme indiqué ici, mais pour ne pas travailler ma mise en œuvre est ServerSide:l'image GWT obtenir du serveur

File f = fileFromDatabase // from database the fileName is india.png 
DataInputStream din = new DataInputStream(new FileInputStream(f)); 
din.readFully(data); 
din.close(); 
String base64 = Base64Utils.toBase64(data); 
String[] s = filename.split("\\."); 

base64 = "data:" + "india/png" + ";base64," + base64; 
or 
base64 = "data:image/png;base64," + base64; 

return base64; 

clientSide: 

imageService.getImageData(new AsyncCallback() { 
    @Override 
    public void onSuccess(String imageData) {  
     Image image = new Image(imageData);  
     Canvas.addChild(image); 
     //this Canvas class addItem into com.smartgwt.client.widgets.Window 
     } 
    @Override 
    public void onFailure(Throwable caught) { 

    } 
} 
client side imageData stirng is <image class="gwt-Image src=sume big string starts with "data:image/png;base64,someSting......>" 

côté client eventhough ne pouvait pas voir l'image.

S'il vous plaît effacer mon doute Merci à l'avance

+0

Comment utilisez-vous la toile? Si vous dessinez l'image sur un canevas, vous devez l'attacher au DOM avant de pouvoir l'utiliser. Votre encodage à base64 semble correct. – WLGfx

+0

Merci pour la réponse myClass extends Canvas {tout le code côté client ici enfin juste this.addChild (image)} je ne sais pas si elle dessine ou ajoute un composant. mais je reçois l'image du lecteur local, je peux voir l'image sur la toile. –

+0

Vous verrez toujours l'image car elle sera toujours ajoutée au DOM mais vous devrez toujours attacher un LoadHandler si vous prévoyez d'en faire autre chose. Pour mon but, je devais l'attacher au DOM caché, attendre qu'il se charge, puis le dessiner sur une toile. – WLGfx

Répondre

0

Lorsque vous obtenez la chaîne base64 du serveur, vous devez ajouter un gestionnaire de charge sur l'image dans le DOM. La façon dont je l'ai fait est de l'attacher au DOM et de le cacher comme dans le code ci-dessous.

/** get events preview from server, attach to the DOM and store in 'preview' 
* @param handler option to pass a custom load handler 
*/ 
private void get_preview(LoadHandler handler) { 
    final LoadHandler load_handler = handler; 

    server.getPreviewImage(user, data, new AsyncCallback<String>() { 

     @Override 
     public void onFailure(Throwable caught) { 
      log.info("getPreviewImage: " + error); 
     } 

     @Override 
     public void onSuccess(String result) { 
      preview = null; 

      if (result != null) { 
       ImageElement ie = doc.createImageElement(); 

       preview = Image.wrap(ie); 
       preview.setVisible(false); 

       doc.getElementById("imagedummy").removeAllChildren(); 
       doc.getElementById("imagedummy").appendChild(preview.getElement()); 

       // add load handler to DOM image before being able to use 

       if (load_handler == null) { 

        preview.addLoadHandler(new LoadHandler() { 
         @Override 
         public void onLoad(LoadEvent event) { 
          display_preview(); 
         } 
        }); 
       } else { 
        preview.addLoadHandler(load_handler); 
       } 

       preview.setUrl(result); 
      } 
     } 
    }); 
} 

/** Displays the preview on the canvas. 
* Resizes canvas if necessary and sets zoom 
*/ 
private void display_preview() { 
    EventSize size = data.getEventSize(); 

    canvas.canvas.setCoordinateSpaceWidth(size.width); 
    canvas.canvas.setCoordinateSpaceHeight(size.height); 

    float zoom = Float.parseFloat(preview_zoom.getSelectedValue()); 
    canvas.canvas.setPixelSize((int)(size.width * zoom), (int)(size.height * zoom)); 

    if (preview != null) { 
     ImageElement elem = ImageElement.as(preview.getElement()); 
     canvas.canvas.getContext2d().drawImage(elem, 0, 0); 
    } 
}