【问题标题】:Export/download dynamic file w/ status on client导出/下载带有客户端状态的动态文件
【发布时间】:2013-11-23 10:29:07
【问题描述】:

我有一个具有导出功能的 angularjs 应用程序。导出在服务器端动态生成文件。该文件的生成可能需要几秒钟到几分钟。我希望能够为用户提供某种服务器正在生成文件的状态。即使它只是页面上的一个微调器,让用户知道发生了什么事。

我的问题是这个。我没有将“GET”请求作为 Angular 的资源。我只是设置:

window.location.href

指向服务器上将开始文件生成并将其发送回客户端的 url。

这意味着如果文件需要 1 分钟来生成浏览器的下载对话框,直到该分钟过去并且文件准备好下载时才会弹出。

有没有办法对文件下载发出 GET 请求,然后在 get 请求成功时得到回调?

【问题讨论】:

    标签: html angularjs download


    【解决方案1】:

    您可以在隐藏的 iframe 中开始下载文件并显示加载器,并在 iframe 加载时使用 onload 事件处理程序隐藏加载器。

    下面的示例代码只是为了给你一个想法 -

    hiddenIframe.src = url;
    loader.show();
    
    hiddenIframe.onload = function() {
       loader.hide();
    };
    

    【讨论】:

    • 看起来很棘手,我喜欢它!但是,当 src 更改时,我没有看到 onload 函数被触发。
    • 它不会在源更改但在下载文件时触发。这里有一个例子 - stackoverflow.com/questions/13952942/…
    • 如果我生成文件服务器端,这会起作用吗?或者该文件是否已经存在?似乎这对于我的服务器上存在的文件非常有用,但是如果我动态生成一个二进制文件并将其发送回来,它就不起作用了。
    • 嗯,它应该适用于这两种情况。 iframe 不知道内容是在服务器中随时可用还是动态准备的,但它的 onload 处理程序只会等待内容被加载并在加载时调用。
    • 不适用于较新的 Chrome 浏览器。最终使用github.com/johnculviner/jquery.fileDownload。添加cookie的相同解决方案。效果很好。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-12-15
    • 2022-08-02
    • 2011-11-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-09-22
    相关资源
    最近更新 更多