Vaadin Flow下载代码适用于Chrome,但不适用于Firefox-如何同时支持两者?

时间:2019-06-12 16:59:14

标签: vaadin vaadin-flow vaadin10

我有以下代码从Vaadin Flow(12.0.7)下载文件。

exportBtn.addClickListener(e -> {
toDownload = FileUtil.getLatestExport();

(toDownload != null) {
                StreamResource resource = new StreamResource(toDownload.getName(),
                        () -> FileUtil.getInputStreamForFile(toDownload));

                Element object = new Element("object");
                object.setAttribute("download", true);
                object.setAttribute("data", resource);

                Input name = new Input();
                UI.getCurrent().getElement().appendChild(name.getElement(), object);
   }
});

toDownload找到我要下载的文件。如果我单击Chrome中的按钮,则浏览器将下载我的文件;如果我单击Firefox中的按钮,则不会进行任何操作。我需要以哪种方式调整代码以支持Chrome和Firefox?

我以这个tutorial作为参考。

1 个答案:

答案 0 :(得分:1)

对于通过Vaadin Flow中的某些操作触发的下载,还有一种解决方法,例如您有一个按钮,该按钮在下载文件之前有条件地显示一个对话框:

 Anchor hiddenDownloadLink = new Anchor(createYourStreamResource(), "Workaround");
 hiddenDownloadLink.setId("DownloadLinkWorkaround_" + System.currentTimeMillis());
 hiddenDownloadLink.getElement().setAttribute("style", "display: none");
 // TODO: add the link somehwere in your view
 UI.getCurrent().getPage().executeJs("document.getElementById('" + hiddenDownloadLink.getId().orElseThrow() + "').click();");

在FF,Chrome和Edge中进行了测试。解决方法是模拟点击锚点后触发下载。