亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何在我的 Vaadin 服務中接收文件內容?

如何在我的 Vaadin 服務中接收文件內容?

偶然的你 2022-05-21 14:09:55
我想在我的 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上的文檔未提供此信息。我相信我應該以某種方式將 a 鏈接StreamReceiver到相關<vaadin-upload>問題,但我不知道該怎么做。我正在使用 Vaadin Flow(版本 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)
查看完整描述

2 回答

?
白衣非少年

TA貢獻1155條經驗 獲得超0個贊

大量編輯:您的問題的實際解決方案是您Upload在 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());

        });

    }

}

我最初的回答是使用與您的問題無關的不必要的替代方法(我起初是這么認為的),但有助于找到真正的解決方案。


查看完整回答
反對 回復 2022-05-21
?
慕容3067478

TA貢獻1773條經驗 獲得超3個贊

最好的解決方案取決于您的上下文,主要是您的后端如何接受數據?它是否接受可以讀取數據的輸入流,是否為您提供寫入數據的輸出流,或者是否有一個簡單的 byte[] 來緩沖內容。

如果您在表單中使用 Binder,則可以使用 Viritin 插件中的 ByteArrayUploadField,它直接綁定到您可能在域對象中擁有的 byte[] 類型。

我最近寫了一篇文章,解釋了 Vaadin Upload組件的功能。檢查以獲取更多詳細信息。


查看完整回答
反對 回復 2022-05-21
  • 2 回答
  • 0 關注
  • 135 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號