创建文件时 Vaadin 上传 UnsupportedOperationException 问题

Vaadin Upload UnsupportedOperationException issue while creating a File

我试图通过 Vaadin 中的表单获取 midi 文件,但是当我尝试将此文件放入文件 class 时出现 UnsupportedOperationException。这发生在文件 midiFile = fileData.getFile();

java.lang.UnsupportedOperationException: class java.io.ByteArrayOutputStream not supported. Use a UploadOutputStream

在表单中似乎文件已加载,但在尝试生成文件时出错。我不知道为什么会这样,因为我按照 Vaadin 文档中的方法从上传中获取文件。而且我不明白为什么它在这个异常中说“如果 outputBuffer 不是 UploadOutputStream 就会发生”。 https://vaadin.com/api/platform/23.0.9/com/vaadin/flow/component/upload/receivers/FileData.html

如果我从 MemoryBuffer 获取 FileData 后 运行 getFileName(),我会看到最近上传的文件在那里。 https://vaadin.com/api/platform/23.0.9/com/vaadin/flow/component/upload/receivers/MemoryBuffer.html

这是完整代码。

import com.vaadin.flow.component.upload.Upload;
import com.vaadin.flow.component.upload.receivers.FileData;
import com.vaadin.flow.component.upload.receivers.MemoryBuffer;

public MainView() {

    MemoryBuffer memoryBuffer = new MemoryBuffer();
    Upload midiFileUpload = new Upload(memoryBuffer);
    midiFileUpload.setDropLabel(new Label("Upload a file in .mid format"));

    midiFileUpload.addSucceededListener(event -> {

        InputStream inputFileData = memoryBuffer.getInputStream();
        String fileName = event.getFileName();
        long contentLength = event.getContentLength();
        String mimeType = event.getMIMEType();
        FileData fileData = memoryBuffer.getFileData();
        
        try {
            File midiFile = fileData.getFile();
        } catch (UnsupportedOperationException uoe) {
            System.out.println("OutputBuffer is not an UploadOutputStream.");
            uoe.printStackTrace();
        } catch (NullPointerException npe) {
            System.out.println("Empty buffer.");
            npe.printStackTrace();
        }
    });
}

我不知道为什么会出现这个问题,但我只是从 MemoryBuffer 更改为 FileBuffer class 就解决了它。现在可以了。

顾名思义,MemoryBuffer将上传的文件存储在内存中,所以它不能提供一个java.io.File,只能提供一个InputStream来读取数据。如果您希望 Upload 使用(临时!)文件,请改用 FileBuffer