【问题标题】:Set cookie only after file download complete.仅在文件下载完成后设置 cookie。
【发布时间】:2014-08-02 15:40:46
【问题描述】:

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

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

设置cookie的代码

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

我在一个 Servlet 上设置它,该 Servlet 还具有获取文件并通过输出流将其流式传输到浏览器的代码。

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

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

提前致谢。

【问题讨论】:

    标签: java javascript jquery servlets


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        【解决方案3】:

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

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

        希望这对其他人有所帮助。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2013-10-17
          • 2016-07-24
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2014-06-06
          相关资源
          最近更新 更多