gpt4 book ai didi

vaadin - 如何检测 Vaadin FileDownloader 何时成功或失败

转载 作者:行者123 更新时间:2023-12-01 05:07:49 24 4
gpt4 key购买 nike

我有 Vaadin 7 代码可​​以让用户选择下载文件:

    Button btnDownloadResults = new Button("Download Results", FontAwesome.CLOUD_DOWNLOAD);
resource = new StreamResource(new MyStreamResource(), suggestedSaveAsFilename);
new FileDownloader(resource).extend(btnDownloadResults);

我想在下载成功时触发代码,或者即使下载成功启动。其用途包括关闭窗口、启动进度微调器或增加下载计数。

与 Vaadin Upload 组件不同的是,FileDownloader 没有任何监听器来确定文件下载何时失败、成功或开始。

这是我的 StreamResouce 子类的简化版本:
public class MyStreamResource implements StreamSource {
@Override
public InputStream getStream() {
String filename = /* code to determine the filename */;

try {
final File results = new File(FilenameUtils.normalize(filename));
return new FileInputStream(results);
} catch (FileNotFoundException fnfe) {
String errorMsg = "Cannot download results. Try again later, or contact your sysadmin.";
Utilities.showError(errorMsg);

return null;
} catch (Exception e) {
Utilities.logAndShowException(e);
return null;
}
}
}

请注意,getStream 方法在用户甚至被提示保存文件的位置(他们可以选择取消)之前返回。因此我无法从该方法内部触发任何内容。

我得到的一个建议是将 FileDownloader 子类化如下:
FileDownloader fileDownloader = new FileDownloader(fileInputStream) {
private static final long serialVersionUID = -4584979099145066535L;
@Override
public boolean handleConnectorRequest(VaadinRequest request, VaadinResponse response, String path) throws IOException {
boolean result = super.handleConnectorRequest(request, response, path);
if (result) {
/* YOUR LOGIC GOES HERE */
}
return result;
}
} ;

同样,这触发得太快了(并且 bool 结果始终为真,即使我的 StreamSource 返回 null。)

有什么建议么?

最佳答案

经过更多研究,我相信答案是没有简单的方法可以从 FileDownloader 获取此信息。

困难似乎是 FileDownloader 设计方式的结果。从 FileDownloader docs :
“应在用户单击例如 Button 时直接开始下载,而无需通过服务器端单击监听器,以避免在某些浏览器中触发安全警告。”

因为没有返回到 Web 服务器的往返,所以当下载失败、启动或成功时,没有地方可以响应。

一些模糊的(可能是坏的)解决方法的想法:

  • 让 JS 向网络发布某种异步通知
    服务器,让它知道发生了什么。 (使用 JMS 还是 Ajax?)
  • 如果后端有某种与传输文件有关的事件进程,它
    会知道什么时候转移发生。

  • 但简短的回答似乎是 Vaadin 没有内置的方法来做到这一点。

    关于vaadin - 如何检测 Vaadin FileDownloader 何时成功或失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27161460/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com