Vaadin Flow 下载代码适用于 Chrome 但不适用于 Firefox - 如何同时支持两者?
Vaadin Flow download code works for Chrome but not for Firefox - How can I support both?
我有以下代码从 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作为参考。
对于由 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 中测试。解决方法模拟点击触发下载的锚点。
我有以下代码从 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作为参考。
对于由 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 中测试。解决方法模拟点击触发下载的锚点。