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

时间:2014-06-12 10:36:33

标签: java javascript jquery servlets

我有一个场景,我想告诉用户下载已完成并提示关闭按钮。为此我使用了一个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(我相信这不是罪魁祸首)。

提前致谢。

3 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:1)

我做了RaviH和Marco提出的一些事情。我使用Jquery文件下载插件来监控下载何时开始,然后相应地更改视觉效果。然后在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`. 

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

希望这有助于他人。

答案 2 :(得分:0)

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