浏览器下载完成事件

lau*_*ura 13 java web-applications file download

我们一直在寻找答案,但尚未找到解决方案.

我们有一个Web服务器,允许用户下载文件(pdfs),这些文件是从servlet动态生成和提供的.我们想知道下载何时完成(以及如何成功,是否失败,用户取消了吗?).

有没有办法在没有用户输入的情况下知道这个?这些文件相对较小,因此不需要进度条功能,但我们需要某种"端钩",它会在下载完成后报告.这可能吗?

[编辑]浏览器端有什么功能可以检测下载结束并通过ajax报告回服务器?

ZZ *_*der 8

您可以从直接连接到浏览器的服务器(TCP连接的端点)获得一个非常好的主意.当用户取消下载或遇到任何网络问题时,服务器将出现IO错误.所以,如果你可以直接运行服务器(没有代理).你可以这样做,

  try {
      response.setContentType("application/pdf");
      response.setContentLength(bytes.length);
      ServletOutputStream ouputStream = response.getOutputStream();
      ouputStream.write(bytes, 0, bytes.length);
      ouputStream.flush();
      ouputStream.close();
      logger.info("PDF " + fileName + " sent successfully");
  } catch (Exception e) {
      logger.error("PDF " + fileName + " error: " + e.getMessage());
      throw e;
  }
Run Code Online (Sandbox Code Playgroud)

但是,成功下载后用户可能无法在浏览器中看到PDF.来自浏览器的ACK将是最好的方法.如果浏览器直接显示PDF,则无法执行此操作.您必须使用某种Javascript PDF查看器,并在显示时将回调添加回服务器.


Dav*_*itz 4

除非出现网络错误,否则您无法知道。唯一的方法是让浏览器向服务器发送第二个事件(使用 AJAX)以确认下载已成功完成。

  • 为什么这个答案被接受?我们仍然不知道浏览器如何知道下载完成 (19认同)
  • 浏览器如何知道下载是否成功完成?事实上,这就是我的问题的要点,我将进行编辑以使其更清楚 (3认同)
  • 劳拉,你为什么授予这个答案?) (2认同)