仅在文件下载完成后设置cookie。

我有一个场景,我想告诉用户下载已完成并提示关闭按钮。 为此我使用了一个jquery插件,它持续监视cookie以了解下载何时完成。

我的问题是我想在下载完成后立即设置此cookie( fileDownload = true and path="/" )。 为此,我尝试了各种位置来设置此cookie。 但每次在下载开始前设置cookie。

设置cookie的代码。

 Cookie fileDwnld = new Cookie("fileDownload", "true"); fileDwnld.setPath("/"); response.addCookie(fileDwnld); 

我在Servlet上设置它,它也有代码来获取文件并通过输出流将其流式传输到浏览器。

我唯一的问题是在文件下载之前设置cookie。

任何建议。 我正在使用Tomcat 7. Java 1.6,Servlet。 我使用的jquery插件是fileDownload.js(我相信这不是罪魁祸首)。

提前致谢。

您可以在successCallback上创建另一个请求(使用AJAX / jquery)(如果这是您正在使用的插件),指向另一个在响应中设置cookie的servlet。

我做了RaviH和Marco提出的一些事情。 我使用Jquery fileDownload插件来监视下载何时开始,然后相应地更改视觉效果。 然后在successCallback事件中,我启动了一段JS代码,它不断向服务器轮询下载状态。

我通过在servlet中设置一个会话属性来实现这个目的,该属性通过流推送文件。 会话属性名称包含随请求一起发送的随机字符串,在我的情况下,我以毫秒为单位发送当前时间,例如DOWNLOAD_STATUS_(Random Code)

 Again when I am polling I am resending the same Random Code through ajax and get the status. The three status I am using are `STARTED`,`PROGRESS` and `COMPLETE`. 

在浏览器上,我显示进度或加载动画,同时获得进度响应,但是当我得到完整响应时,我做了适当的更改以显示下载完成。

希望这能帮到别人。

使用HTTP协议中的set-cookie标头set-cookie 。 这是一个标题,当下载完成时,将无法在请求结束时设置cookie。 你应该找到一些其他方法来做到这一点。 可以跟踪服务器上的下载完成情况,然后通过轮询服务器来检测它。 其他方式是使用长轮询/彗星。