Java 如何在我的Vaadin服务中接收文件内容?
我想在我的web应用程序中添加一个上载按钮。在HTML模板中,我添加了:Java 如何在我的Vaadin服务中接收文件内容?,java,vaadin,vaadin12,Java,Vaadin,Vaadin12,我想在我的web应用程序中添加一个上载按钮。在HTML模板中,我添加了: <link rel="import" href="../../../bower_components/vaadin-upload/src/vaadin-upload.html"> <h2 id="header-Upload">Upload</h2> <vaadin-upload nodrop/> 在Java中: public class MyView extends Po
<link rel="import" href="../../../bower_components/vaadin-upload/src/vaadin-upload.html">
<h2 id="header-Upload">Upload</h2>
<vaadin-upload nodrop/>
在Java中:
public class MyView extends PolymerTemplate<Model> {
private final MemoryBuffer buffer = new MemoryBuffer();
@Id("upload")
private final Upload upload = new Upload(buffer);
public MyView() {
upload.addSucceededListener(event -> {
System.out.println(event.getFileName());
System.out.println(buffer.getInputStream());
});
}
}
massive Edit:问题的实际解决方案是在java类中实例化了
上传
,这时您应该让Vaadin这样做(因为聚合模板),并使用html模板(
)和java代码(@Id)中的标识符引用此上传组件(“upload”)private upload upload;
)。您现在可以使用upload.setReceiver(buffer);
在java类中设置上载的接收器
公共类MyView实现PolymerTemplate{
@Id(“上传”)//com.vaadin.flow.component.polymertemplate
私有上传;//没有实例化!
private private final MemoryBuffer buffer=new MemoryBuffer();
公共MyView(){
upload.setReceiver(缓冲区);
upload.addSucceededListener(事件->{
System.out.println(event.getFileName());
System.out.println(buffer.getInputStream());
});
}
}
我最初的回答是使用一种与你的问题无关的不必要的替代方法(起初我是这么认为的),但有助于找到真正的解决方案。最佳解决方案取决于您的上下文,主要取决于您的后端如何接受数据?它是否接受可以读取数据的inputstream,是否为您提供写入数据的outputstream,或者是否有一个简单的字节[]用于缓冲内容 如果您在表单中使用Binder,则可以使用Viritin加载项中的ByteArrayUploadField,它直接绑定到域对象中可能具有的byte[]类型
我最近编写了一个组件。请查看更多详细信息。您是在java中创建上载实例,还是只在html中创建上载实例?如果您在java中使用它,您可以尝试给它一个id,例如
,并在相应的java文件中将其与@id(“上载”)绑定private Upload Upload
并从那里完成其余的工作。@Cashbee我试图用HTML定义按钮,并用Java完成所有回调/流处理。在问题中查看我的更新。@Tazavoo我试过了,但我遇到了一个无法解释的异常。有什么想法吗?谢谢。
public class MyView extends PolymerTemplate<Model> {
private final MemoryBuffer buffer = new MemoryBuffer();
@Id("upload")
private final Upload upload = new Upload(buffer);
public MyView() {
upload.addSucceededListener(event -> {
System.out.println(event.getFileName());
System.out.println(buffer.getInputStream());
});
}
}
[qtp162821120-20] ERROR com.vaadin.flow.server.DefaultErrorHandler -
com.vaadin.flow.server.UploadException: Upload failed
at com.vaadin.flow.server.communication.StreamReceiverHandler.streamToReceiver(StreamReceiverHandler.java:429)
Caused by: java.lang.IllegalStateException: Upload cannot be performed without a receiver set
at com.vaadin.flow.component.upload.Upload$DefaultStreamVariable.getOutputStream(Upload.java:581)
at com.vaadin.flow.server.communication.StreamReceiverHandler.streamToReceiver(StreamReceiverHandler.java:358)
public class MyView implements PolymerTemplate<Model> {
@Id("upload") // com.vaadin.flow.component.polymertemplate
private Upload upload; // NO INSTANTIATION!
private private final MemoryBuffer buffer = new MemoryBuffer();
public MyView (){
upload.setReceiver(buffer);
upload.addSucceededListener(event -> {
System.out.println(event.getFileName());
System.out.println(buffer.getInputStream());
});
}
}