我试图将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;
这可能是非常简单的案例,但我发现的所有例子都超过3 - 4年,看起来并没有帮助。
有人可以告诉我,应该怎么做?
答案 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文件后):
当然,您可能希望将uploadField侦听器的类型更改为更具体的类型。 在Java 8,Vaadin 7.4.1,Eclipse Luna上进行了测试。