2015-08-13 1 views
0

Я хочу получить загруженное изображение как массив байтов (чтобы его можно было вставить в базу данных sql). Я также хочу показать загруженное изображение в виде предварительного просмотра.Как загрузить изображение с помощью ByteArrayOutputStream в Ваадине?

Я пробовал следующий код, но im не получал байты полного изображения. (Если я распечатать массив байтов печатает только несколько символов)

final Embedded preview = new Embedded("Uploaded Image"); 
preview.setVisible(false); 

final Upload upload = new Upload(); 
upload.setCaption("Image"); 

// Create upload stream 
final ByteArrayOutputStream baos = new ByteArrayOutputStream(); // Stream to write to 

upload.setReceiver(new Upload.Receiver() { 
    @Override 
    public OutputStream receiveUpload(String filename, String mimeType) { 

     return baos; // Return the output stream to write to 
    } 
}); 

upload.addSucceededListener(new Upload.SucceededListener() { 
    @Override 
    public void uploadSucceeded(Upload.SucceededEvent succeededEvent) { 
     final byte[] bytes = baos.toByteArray(); 

     preview.setVisible(true); 
     preview.setSource(new StreamResource(new StreamResource.StreamSource() { 
      @Override 
      public InputStream getStream() { 
       return new ByteArrayInputStream(bytes); 
      } 
     }, "")); 

    } 
}); 
+0

Получить байт в методе GetStream() и посмотреть, поможет ли это. – KDM

+0

u означает переменную байтов? он содержит только несколько символов, если я печатаю его – tharinduwijewardane

+0

да. Переменная 'bytes'. – KDM

ответ

0
image.setSource(new StreamResource(new StreamResource.StreamSource() { 
    @Override 
    public InputStream getStream() { 
    return new ByteArrayInputStream(baos.toByteArray()); 
    } 
}, "")); 
+0

Вместо «попробуйте это» мы предпочли бы короткое объяснение вашего решения, потому что решение «baos.toByteArray()» уже было в комментариях. –