我有一个场景,我想告诉用户下载已完成并提示关闭按钮。为此我使用了一个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(我相信这不是罪魁祸首)。
提前致谢。
答案 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。你应该找到一些其他方法来做到这一点。可以跟踪服务器上的下载完成情况,然后通过轮询服务器来检测它。其他方式是使用长轮询/彗星。