使用EasyUploads在Vaadin中显示上传的图像

时间:2015-04-03 08:03:49

标签: image upload vaadin embedded-resource

我试图将EasyUploads-addon用于Vaadin,但无法显示图片。

当我点击插件"选择文件" - 按钮时,它会要求我打开一个文件。我从我的图像中选择了一些.png文件,插件显示了它下面图片的信息。

然后我按下我的"上传" - 按钮,目前只需要显示上传的图像。

private void showUploadedImage() {
    Object value = upload.getValue();
    byte[] data = (byte[]) value;

    StreamResource resource = new StreamResource(
            new StreamResource.StreamSource() {
                private static final long serialVersionUID = 1L;

                @Override
                public InputStream getStream() {
                    return new ByteArrayInputStream(data);
                }
            }, "filename.png");

    image.setVisible(true);
    image.setCaption("Uploaded image");
    image.setSource(resource);
}

upload = EasyUpload组件,用于选择文件

image =我与设计师一起绘制到我的布局的嵌入式组件。

但是当我用浏览器查看页面时,图像不会显示。图像显示为根本没有图像,只显示标题。

来自网页来源的图片的HTML代码:



<img src="null">
&#13;
&#13;
&#13;

这可能是非常简单的案例,但我发现的所有例子都超过3 - 4年,看起来并没有帮助。

有人可以告诉我,应该怎么做?

1 个答案:

答案 0 :(得分:3)

你需要在UploadField类上调用一个setter:

uploadField.setFieldType(FieldType.BYTE_ARRAY);

工作SSCCE:

@Override
protected void init(VaadinRequest request) {
    setContent(layout);
    final UploadField uploadField = new UploadField();
    uploadField.setAcceptFilter(".png");
    uploadField.setFieldType(FieldType.BYTE_ARRAY);
    uploadField.addListener(new Listener(){
        @Override
        public void componentEvent(Event event)
        {
            showUploadedImage(uploadField);
        }
    });
    layout.addComponent(uploadField);
    layout.addComponent(image);
}

private void showUploadedImage(UploadField upload) {
    Object value = upload.getValue();
    final byte[] data = (byte[]) value;

    StreamResource resource = new StreamResource(
            new StreamResource.StreamSource() {
                @Override
                public InputStream getStream() {
                    return new ByteArrayInputStream(data);
                }
            }, "filename.png");

    image.setSource(resource);
}

生成(选择.png文件后):winniethepooh

当然,您可能希望将uploadField侦听器的类型更改为更具体的类型。 在Java 8,Vaadin 7.4.1,Eclipse Luna上进行了测试。