2016-12-02 2 views
0

, когда я осуществил, как указано здесь, но не работает моя реализация ServerSide:GWT изображение получают с сервера

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......>" 

Eventhough стороне клиента не может видеть изображение.

Пожалуйста, удалите мои сомнения Спасибо заранее

+0

Как вы используете холст? Если вы рисуете изображение на холсте, оно должно быть прикреплено к DOM, прежде чем вы сможете его использовать. Ваша кодировка base64 выглядит правильно. – WLGfx

+0

Спасибо за ответ myClass extends Canvas {весь код на стороне клиента здесь, наконец, только this.addChild (изображение)} Я не знаю, является ли это рисованием или добавлением компонента. но я получаю изображение с локального диска. Я вижу изображение на холсте. –

+0

Вы по-прежнему увидите изображение, потому что оно все равно будет добавлено в DOM, но вам все равно придется присоединить LoadHandler, если вы планируете сделать с ним что-нибудь еще. Для моей цели я должен был прикрепить его к DOM, подождать, пока он загрузится, а затем нарисуйте его на холсте. – WLGfx

ответ

0

Когда вы получаете base64 строку с сервера вам нужно добавить обработчик нагрузки на изображение в DOM. То, как я это сделал, - это прикрепить его к DOM и скрыть его, как в приведенном ниже коде.

/** 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); 
    } 
} 

 Смежные вопросы

  • Нет связанных вопросов^_^