当前位置: 首页 > 知识库问答 >
问题:

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

马欣德
2023-03-14

我正在尝试为Vaadin使用EasyUploads插件,但无法显示图像。

当我点击插件的“选择文件”按钮时,它会要求我打开一个文件。我从我的图片中选择了一些.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用于选择文件的组件

图像=我与设计师一起绘制到布局中的嵌入组件。

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

页面源中图像的HTML代码:

<img src="null">

这可能是一个非常琐碎的案例,但是我找到的所有例子都超过3-4年了,看起来没有帮助。

有人能告诉我该怎么做吗?

共有1个答案

公良高刚
2023-03-14

您需要在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);
}

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

 类似资料:
  • 我写这篇文章是因为我需要一些帮助。我无法根据应用程序中的特定路径显示图像。 基本上它在做什么:我有一个名为扇区的模块,每个扇区都可以有一个与之相关的图像。当我使用Vaadin的上传组件时,我将图像的路径保存到我数据库中的一个表中,以便它可以显示之前选择的图片。 图像的实际路径很奇怪,似乎瓦丁将图像复制到了一个动态随机文件夹中。它不能使用图像的实际路径,这似乎是合乎逻辑的。 但问题是:路径在数据库中

  • 我想用谷歌可视化应用编程接口显示条形图。我遵循了这个线程中的示例代码:https://vaadin.com/forum/#!/thread/2971952/ 这是我的代码: GVis。JAVA gvis.js gvis连接器。js 代码将加载这两个文件: ui de,table de.css 格式de、默认de、ui de、表格de、corechart de.I.js 但是图表没有出现,也没有JS

  • 通过本案例,我们实现blobImage上传的图片在grid表格中的显示。 grid的cellRender方法渲染单元格显示图片,例: Model.prototype.personGridCellRender = function(event){ if(event.colName == "sPhoto"){ var url = biz.Request.setBizPar

  • 通过这个示例我们实现通过attachmentImage上传的图片在grid表格中显示,分成两个步骤: 1.引入DocUtils: DocUtils = require('$UI/system/components/justep/docCommon/docUtil'); 2.通过grid的cellRender方法来显示图片 例: Model.prototype.imageGridCellRender

  • 我有一个巨大的问题显示一个上传的图片在Spring引导,问题是第一次我上传它,路径是完美的,一切都很好,但图像不显示,当我重新启动服务器图像显示。 我认为这是因为当启动项目时,它编译成一个.jar而没有映像,所以在重新启动项目之前,映像并不真实存在。 我不知道如何解决这个问题,不确定是否可能。

  • 我正在使用JavaFX,在那里我编写了一个包含的代码,通过我想在我的场景上显示图像,但它不起作用。图像不显示。 当我使用它还显示一个错误。虽然我70%的编码已经完成,但我只是坚持在现场显示图像(不上传)。 以下是我正在使用的代码: 所以,我需要的是通过单击按钮并选择图像来显示我的场景中的图像。