首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Vaadin流:如何使用拖放文件

Vaadin流:如何使用拖放文件
EN

Stack Overflow用户
提问于 2022-03-10 11:59:18
回答 1查看 65关注 0票数 0

我有一个部分(DropTarget),用户可以从我的应用程序中删除几个项。这个很好用。

现在,我还希望允许用户将文件拖到该DropTarget中。

当我将文件拖到DropTarget时,我注册的drop侦听器会收到通知,但是--据我所见--不提供使用拖放文件的任何可能性。

有人知道怎么跑吗?

使用Vaadin流22.0.7

EN

Stack Overflow用户

发布于 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

代码语言:javascript
复制
        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,当然,您可能不希望将上传保存为物理文件,但是可以将其直接放到数据库中。

票数 1
EN
查看全部 1 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71423791

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档