通过 Response.ContentType、Response.End 输出文件时如何显示进度状态/旋转器?

2024-02-22

我有一个网络表单下载链接按钮,在按钮的点击事件上我正在获取数据,然后生成 .XLSX 文件供下载。在文件生成过程中,响应.Clear()叫做,响应内容类型被设定并最终响应.End()叫做。

我需要显示微调器 .gif在那次操作期间。文件生成并弹出文件“打开/保存”对话框后,微调器不应显示。不幸的是,由于我正在更改内容类型并调用 Response.End,因此没有响应返回到页面进行处理。

任何人都可以为这种情况提供一些帮助吗?


我实际上最终找到了一个解决方案不需要使用 iFrame。相反,我使用Cookie,文件生成过程将简单的名称值对写入其中。稍后可以通过 JavaScript 从客户端检查此 cookie,以确定响应(.xlsx 文件)何时完成。

结果应该是加载旋转图像应该显示,直到 .xls 文件被加载。生成并返回到客户端(Cookie 包含下载完成=true名称值对)。

  1. In the 客户端点击时活动为链接按钮:

    function startFileDownload(){
    
    // Set Timout for calling checkState function again
    setTimeout(checkState, 1100);
    setCookie('DownloadComplete', '', 1);
    
    // Download is starting, Hide Download LinkButton
    document.getElementById('<%= btnDownloadExcel.ClientID%>').style.display = "none";
    
    // Display progress spinner
    var img = document.getElementById("image1");
    img.src = "Images/99.GIF";
    document.getElementById('image1').className = "spinnerDisplay";
    }
    
  2. 这是 JavaScript 代码检查状态功能:

    function checkState()
    {
        var img = document.getElementById("image1");
        var finished = getCookie("DownloadComplete");
        // Check to see if download is complete 
    if (!isEmpty(finished)) {
        setCookie('DownloadComplete', '');
        // Download is complete, Hide progress spinner
        img.className = "spinnerHide";
        document.getElementById('<%= btnDownloadExcel.ClientID%>').style.display = "";
    } else {
        // Refresh progress spinner, Set Timout for calling checkState function again
        img.src = "Images/99.GIF";
        setTimeout(checkState, 1100);
    }
    }
    
  3. 这是 JavaScript 代码设置Cookie获取Cookie功能:

    function setCookie(cName, value){
    var now = new Date();
    var time = now.getTime();
    time += 3600 * 1000;
    now.setTime(time);
    document.cookie = cName + "=" + value 
    + '; expires=' + now.toGMTString() + '; path=/';        
    }
    
    function getCookie(cName)
    {
        var i, x, y, ARRcookies = document.cookie.split(";");
        for (i = 0; i < ARRcookies.length; i++) {
        x = ARRcookies[i].substr(0, ARRcookies[i].indexOf("="));
        y = ARRcookies[i].substr(ARRcookies[i].indexOf("=") + 1);
        x = x.replace(/^\s+|\s+$/g, "");
    
        if (x == cName) {
            return unescape(y);
        }
        }
    }
    
  4. 然后在清除 HTTP 响应后,在生成 .xlsx 文件的类中的服务器端将名称值对添加到 Cookie:

     HttpContext.Current.Response.Clear();
    
     // Append a cookie that will tell the browser the file has finished processing 
     // and is included in that stream (note specific path must match same path for cookie set in JavaScript)            
     HttpCookie cookie = new HttpCookie("DownloadComplete", "true");
     cookie.Expires = DateTime.Now.AddMinutes(60);
     cookie.Path = "/";
     HttpContext.Current.Response.AppendCookie(cookie);
     //Other code here to specify the MIME type, setup the HTTP header 
     //and Response.BinaryWrite out the file
     HttpContext.Current.Response.End();
    
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

通过 Response.ContentType、Response.End 输出文件时如何显示进度状态/旋转器? 的相关文章

  • 执行页面的 javascript 后保存页面的 html 输出

    我正在尝试抓取一个网站 它首先加载 html js 使用js修改表单输入字段 然后使用POST 如何获得 POSTed 页面的最终 html 输出 我尝试使用 phantomjs 执行此操作 但它似乎只有渲染图像文件的选项 谷歌搜索表明这应
  • 将组件注册到现有的 Vue.js 实例

    我是 Vue js 新手 我想注册一个本地组件 如下所述 https v2 vuejs org v2 guide components html Local Registration https v2 vuejs org v2 guide
  • 是否可以将自定义 HTML 添加到传单图层组和图层控件

    有什么方法可以将自定义 HTML 注入图层组和图层控件中吗 在我们的应用程序中 我们实现了滑块 输入 范围 来调整不透明度设置 并且很明显 在其控制容器内部的基础层上使用专用滑块是有意义的 没有选项或参数可以修改此控件 理想情况下 我们希望
  • Chrome 内存/垃圾收集问题

    我在使用 Chrome 时遇到内存 垃圾收集问题 我正在开发一个照片上传网站 该网站允许我的客户使用 HTML5 和文件 API 拖放照片进行上传 因此这在 IE 中不起作用 它仅适用于 Chrome 和 FF 我还没有在 Safari O
  • getElementsByClassName & IE8:对象不支持此属性或方法[重复]

    这个问题在这里已经有答案了 I know getElementsByClassName 不支持IE8 你知道我可以用什么来代替吗 我因错误而变得烦人 对象不支持此属性或方法 HTML 代码是 function sumar var elems
  • 如何在 javascript 或 jquery 中按尺寸对图像进行排序

    如何在 JavaScript 或 jQuery 中按尺寸对图像进行排序 我的代码如下 var imgsrc if document images length lt 1 alert No images to open return for
  • 如何配置 IIS 以接受 POST 请求?

    我知道默认情况下 IIS 不接受发布请求 如何更改此设置 有人可以引导我改变这个 一步一步 吗 如果您使用的是 IIS 6 及更低版本 在 IIS 管理屏幕中右键单击您的网站或虚拟目录 去Properties然后去Home Director
  • 如何删除从 javascript var 转义的反斜杠?

    我有这个变量 var x div class Which is div class 但是我需要 div class abcdef 我怎样才能 unes cape 这个变量来删除所有转义字符 您可以通过正则表达式将反斜杠后跟引号替换为仅引号
  • FormData 中的 Blob 为 null

    我正在尝试通过远程 API 通过 ajax 在 android 中发送创建的照片 我在用着相机图片背景 https github com an rahulpandey cordova plugin camerapicturebackgrou
  • 属性访问器(getter)的扩展运算符问题

    我很难理解为什么以下代码存在一些问题https jsfiddle net q4w6e3n3 3 https jsfiddle net q4w6e3n3 3 Note 所有示例均在 chrome 版本 52 0 2743 116 中进行测试
  • selenium-webdriver 与 webdriverjs 有什么区别(以及何时使用)?

    我是一位使用 selenium webdriver 的经验丰富的专业人士 我正在探索有关如何测试 javascript 应用程序的更多选项 我发现了 webdriverJs 不幸的是 我不明白这两者 2 之间有什么区别 有人可以解释一下何时
  • 使用 Socket.IO 时如何访问会话标识符?

    我有一个聊天 我需要管理独特的连接 我四处搜寻 但我找到的解决方案似乎都已被弃用 那么 如何使用 Socket IO 获取套接字的会话 ID 我在用着Node js http en wikipedia org wiki Node js Ex
  • 获取 byte[]

    我有一个 html 画布 如下所示 output is a base64string of image data var oldImage new Image oldImage onload function var resizeRatio
  • 无法从 JSON 请求获取数据,尽管我知道它已返回

    我试图获取从 getJSON 返回的数据 但我无法让它工作 我已经在 search twitter API 上尝试了相同的代码 效果很好 但它不适用于其他网站 我知道数据已返回 因为我在使用检查器时可以找到它 我通过检查器找到的值是 id
  • ES6 Reflect API 的好处

    我一直在努力升级一些代码以使用 ES6 语法 我有以下代码行 delete this foo 我的 linter 提出了使用建议 Reflect deleteProperty this foo 您可以找到该方法的文档here https d
  • Morgan Logger + Express.js:写入文件并在控制台中显示

    我正在尝试将 Morgan 与 Express js 结合使用来编写日志文件 同时也在控制台上显示我的日志 我正在使用这段代码 var logger require morgan var accessLogStream fs createW
  • 角度 ng-repeat 根据条件添加样式

    我在 div 列表上使用 ng repeat 并且在渲染此 div 的 json 中手动添加项目 我需要定位我在 json 中添加的最后一个 div 它会自动在屏幕上渲染 即 couse 光标所在的位置 其余部分保持在相同位置 但没有给出渲
  • 使用 div 或表格来包含链接列更好吗?

    我的页面底部有 3 列链接 每列都放入一个 div 中 所有三个 div 都包装在页面中央的一个大 div 中 这是更适合桌子的东西还是桌子不适合这项工作 您还可以使用 ul http www w3schools com tags tag
  • 如何从react-bootstrap复选框获取值/属性?

    我正在尝试使用反应引导复选框 https react bootstrap github io components html forms controls https react bootstrap github io components
  • 从 JavaScript 中的 OnClientClick 事件中阻止 C# 中的 asp:Button OnClick 事件?

    我有一个asp Button在我的网页上 它调用 JavaScript 函数和代码隐藏方法 后者进行调用以导航到另一个页面 在 JavaScript 函数中 我正在检查条件 如果不满足这个条件 我想中止导航 以便OnClick方法未被调用

随机推荐