通过 Vaadin Grid 中的条目下载多个文件

Jof*_*off 1 java download vaadin

我在玩 Vaadin,我想弄清楚如何以一致的方式下载多个文件。到目前为止,我已经创建了一个带有小类 的网格CorrespondenceFiles,它绘制了提供网格结构的 getter 和 setter 蓝图。

但是,我不确定如何为多个文件创建下载程序以及解决此问题的最佳方法是什么。基本上,我所做的是使用一个Anchor伪装成下载功能按钮的按钮。

如何迭代或递归地使用我的函数来获取从网格引用后下载的所有元素?


下载功能:

 public Anchor downloadButton(String btnText, String fileName) 
 {

        Button btnDownload = new Button(btnText,VaadinIcon.DOWNLOAD.create());   

        StreamResource StreamResource = new StreamResource(fileName, () -> {
            try 
            {
                return new FileInputStream(fileName);
            } 

            catch (FileNotFoundException e) 
            {
                e.printStackTrace();
                return new ByteArrayInputStream(new byte[]{});
            } 
        });
        Anchor anchorDownload = new Anchor(StreamResource, "");
        anchorDownload.getElement().setAttribute("download", true);
        anchorDownload.add(btnDownload);

        return anchorDownload;
    }

Run Code Online (Sandbox Code Playgroud)

网格实例化:

List<CorrespondenceFiles> fileList = new ArrayList<>();

    fileList.add(new CorrespondenceFiles(1, mode + " - 90111", "Breakdown", "C:\\manager\\90111 - Korn, Niclas - Breakdown.pdf" ,  "90111 - Breakdown.pdf"));
    fileList.add(new CorrespondenceFiles(1, mode + " - 90111 ", "Letter of Approval", "C:\\manager\\90111 - Letter.pdf",  "90111 - Letter.pdf"));
    fileList.add(new CorrespondenceFiles(2, mode + " - 90112",  "Breakdown", "C:\\manager\\90112 - Breakdown.pdf", "90112 - 90112 - Breakdown.pdf"));

    ListDataProvider<CorrespondenceFiles> ldp = new ListDataProvider<CorrespondenceFiles>(fileList);


    grid.setDataProvider(ldp);  
    grid.addColumn(CorrespondenceFiles::getName)
        .setHeader("Name");
    grid.addColumn(CorrespondenceFiles::getDescription)
    .setHeader("Description");
    grid.addColumn(CorrespondenceFiles::getFileName)
    .setHeader("File Name");
Run Code Online (Sandbox Code Playgroud)

注意:fileList列表仅用作数据库返回语句的占位符。

Kas*_*rer 6

单击一个按钮即可下载多个文件并不是您应该做的事情,即使您可以。这个“规则”不是来自 vaadin,而是整个网络。锚元素也不提供这样的功能。存在使用 javascript 的 hacky 解决方法,但强烈建议您不要这样做。

实现您需要的最佳方法是压缩所有需要的文件,然后让用户下载该单个 zip 文件。