gpt4 book ai didi

java - 浏览器下载完成事件

转载 作者:搜寻专家 更新时间:2023-10-30 21:08:02 24 4
gpt4 key购买 nike

我们一直在寻找这个问题的答案,但还没有找到解决方案。

我们有一个 Web 服务器,它允许用户下载文件 (pdf),这些文件是动态生成的,由 servlet 提供。我们想知道下载何时完成(以及如何:是否成功、是否失败、用户是否取消?)。

有没有办法在没有用户输入的情况下知道这一点?这些文件相对较小,因此不需要进度条功能,但我们需要某种“结束 Hook ”,它会在下载完成时进行报告。这可能吗?

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

最佳答案

你可以从直接连接到浏览器的服务器(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;
}

不过,下载成功后,仍有小概率用户在浏览器中看不到PDF。来自浏览器的 ACK 将是最好的方法。如果浏览器直接显示 PDF,则不能这样做。您必须使用某种 Javascript PDF 查看器,并在显示时向服务器添加回调。

关于java - 浏览器下载完成事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1524487/

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