• 博客园logo
  • 会员
  • 众包
  • 新闻
  • 博问
  • 闪存
  • 赞助商
  • HarmonyOS
  • Chat2DB
    • 搜索
      所有博客
    • 搜索
      当前博客
  • 写随笔 我的博客 短消息 简洁模式
    用户头像
    我的博客 我的园子 账号设置 会员中心 简洁模式 ... 退出登录
    注册 登录
PowerCoder
博客园    首页    新随笔    联系   管理    订阅  订阅

ASP.NET输出流至少要有256个字节的数据后Response.Flush方法才会生效

很多时候我们写的asp.net程序会因为做很多操作,所以会花上一分钟甚至几分钟时间。为了使软件使用者能够耐心的等待程序的执行,我们经常会希望有一个进度条来表示程序执行的状态。或者最起码要显示一个类似: “数据载入中”,“正在保存数据” 等的说明性文字。此时我们就会用到Response.Flush()。他会将缓冲区中编译完成的数据先发送到客户端。

但是有很多时候,我们发现即使我们使用了Response.Flush(),但是并没有将已经在输出流中的数据发到客户端。客户端呈献给我们的依然是白屏。经过反复的测试,我得出一个结论(仅代表个人观点,可随意引用,但后果自负)。就是Flush的内容至少要有256字节。也就是Http输出流中至少要有256字节的数据,asp.net才能在执行Response.Flush()的时候将数据发到客户端。

 

我们可以用一段代码来测试下,模拟下载一个1MB大小的Excel文件,但是我们希望不是所有文件数据都加载到服务器输出流后才将数据发送到客户端浏览器开始下载,而是希望部分数据输出到服务器输出流后就调用Response.Flush()立即将数据发送到客户端浏览器开始下载。

Response.ContentType = "application/vnd.ms-excel";
Response.AppendHeader("Content-Length", (1024*1024).ToString());//告诉客户端总共要输出的文件大小为1MB
Response.AppendHeader("content-disposition", "attachment;filename=output.xls");

//模拟输出256个字节到输出流,循环256次,每次输出一个字节
for (var i = 0; i < 256; i++)
{
    Response.BinaryWrite(new byte[] {0X01});
}

Response.Flush();//上面的循环输出256个字节到输出流后,Response.Flush才会将数据发送到客户端,少一个字节都不行
Response.End();

大家可以试一试上面代码中的循环必须是256次(也就是输出256个字节到输出流)Response.Flush方法才会发送数据到客户端,少一次都不行。。。

 

posted @ 2015-12-16 18:40  PowerCoder  阅读(1387)  评论(0)    收藏  举报
刷新页面返回顶部
博客园  ©  2004-2025
浙公网安备 33010602011771号 浙ICP备2021040463号-3