创建文件时 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
。
我试图通过 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
。