【问题标题】:Download multiple files via entries in a Vaadin Grid通过 Vaadin Grid 中的条目下载多个文件
【发布时间】:2020-05-21 14:16:27
【问题描述】:

我正在玩 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;
    }


网格实例化:

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");

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

【问题讨论】:

  • 您一次只能通过 http GET 下载一个文件。如果您想下载多个文件,您必须将它们打包(ZIP 或类似文件)

标签: java download vaadin


【解决方案1】:

即使可以,您也不应该一键下载多个文件。此“规则”并非来自 vaadin,而是适用于整个网络。锚元素也不提供这样的功能。存在使用 javascript 的 hacky 变通方法,但我们强烈建议您这样做。

实现您需要的最佳方式是ZIP all the needed files,并让用户下载该单个 zip 文件。

【讨论】:

    猜你喜欢
    • 2018-12-31
    • 2018-03-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多