どのように私は私のVaadinサービスでファイルの内容を受け取ることができますか?

Absonegative:

私は自分のWebアプリケーションにアップロードボタンを追加したいです。HTMLテンプレートでは、私が追加しました:

<link rel="import" href="../../../bower_components/vaadin-upload/src/vaadin-upload.html">

<h2 id="header-Upload">Upload</h2>
<vaadin-upload nodrop/>

私は今、私のバックエンドVaadinプロセスでストリームを受信したいです。このストリームは、データベースに挿入することができます。

上のドキュメントhttps://vaadin.com/components/vaadin-upload/html-examples/upload-basic-demosは、この情報を提供していません。

私は何とかリンクする必要があると考えているStreamReceiver<vaadin-upload>質問に、私は確かにそれを行う方法はないです。

私はVaadinフロー(バージョン12)を使用しています。

追加情報

私は、次のことを試してみました:

HTMLには:

<vaadin-upload id="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());
        });
    }
}

私は、ファイルをアップロードすると、私は次の例外を取得します:

[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)
kscherrer:

大規模な編集:あなたの問題への実際の解決策は、あなたがインスタンス化されたということでしたUpload(あなたが(理由は、ポリマーテンプレートの)VaadinはこれをやらせるとHTMLテンプレートの両方の識別子を使用して、このアップロードコンポーネントを参照する必要がある場合、あなたのJavaクラスで<vaadin-upload id="upload" nodrop/>)などウェル(Javaコードのように@Id("upload") private Upload upload;)。これで、使用してJavaクラスのアップロードの受信機を設定することができますupload.setReceiver(buffer);

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());
        });
    }
}

私の最初の答えは(私が最初にそう思った)問題に関連していなかった不要な別のアプローチを使用していたが、本当の解決策を見つける助けました。

おすすめ

転載: http://43.154.161.224:23101/article/api/json?id=232550&siteId=1