我有一个部分(DropTarget),用户可以从我的应用程序中删除几个项。这个很好用。
现在,我还希望允许用户将文件拖到该DropTarget中。
当我将文件拖到DropTarget时,我注册的drop侦听器会收到通知,但是--据我所见--不提供使用拖放文件的任何可能性。
有人知道怎么跑吗?
使用Vaadin流22.0.7
发布于 2022-03-11 08:28:46
创建上载组件时,可以指定Receiver。您可以将其作为构造函数参数传递,也可以通过upload.setReceiver(Receiver)传递。根据用例,有不同类型的接收器;如果您可以将所有数据放在服务器内存中,可以使用MemoryBuffer,但是还有其他选项,如FileBuffer,如下所示:https://vaadin.com/docs/latest/ds/components/upload/#handling-uploaded-files-java-only;您也可以实现自己的Receiver。
Receiver允许您访问文件的实际流内容。通常,您希望在上传过程的某个阶段访问数据,这可以通过不同的上载侦听器来完成。如果您只想在上传完全完成后处理它,您可以使用SucceededListener
MemoryBuffer memoryBuffer = new MemoryBuffer();
Upload upload = new Upload(memoryBuffer);
upload.addSucceededListener(event -> {
InputStream fileData = memoryBuffer.getInputStream();
String fileName = event.getFileName();
File targetFile = new File("C:/tmp/" + fileName );
OutputStream outStream = null;
try {
outStream = new FileOutputStream(targetFile);
} catch (FileNotFoundException e) {
e.printStackTrace();
}
try {
outStream.write(fileData.readAllBytes());
} catch (IOException e) {
e.printStackTrace();
}
});实现您自己的Receiver使您能够更灵活地处理上传中的OutputStream,当然,您可能不希望将上传保存为物理文件,但是可以将其直接放到数据库中。
https://stackoverflow.com/questions/71423791
复制相似问题