【问题标题】:Download doesn't start stream until Response.Flush()直到 Response.Flush() 下载才开始流式传输
【发布时间】:2019-08-30 01:24:10
【问题描述】:

我写入 Response.OutputStream,并在 Response.OutputStream.Flush() 上进行中间刷新调用。但是,在我调用 Response.Flush() 之前,客户端不会显示任何传输的数据。

我正在使用流到流的方法来降低大量下载的内存占用,但它实际上并没有向客户端发送数据,这意味着它在响应中累积数据并消耗内存,而不是将其刷新到客户端。

作为测试,我这样做并添加了一个漫长的等待,将其部署到 IIS(只是为了确保这不是 IIS Express 的某些行为):

largeFileStream.CopyTo(Response.OutputStream);
Response.OutputStream.Flush();
Thread.Sleep(10000);
Response.Flush();

调用 Response.Flush 10 秒后浏览器才会显示任何数据传输。

我还尝试了在每个循环之后使用 OutputStream.Flush 调用的缓冲循环,但结果相同。

为什么Response.OutputStream.Flush() 不触发任何数据传输到客户端?

【问题讨论】:

  • 你试过 Response.BufferOutput = False 吗?我认为一个刷新在设备上,而另一个只是从内存刷新到设备。
  • @the_lotus 修复了它。想发布答案? “如果您希望它立即流式传输到客户端,则必须在开始写入 OutputStream 之前设置 Response.BufferOutput = false。”

标签: c# asp.net asp.net-mvc


【解决方案1】:

如果您希望它立即流式传输到客户端,则必须在开始写入 OutputStream 之前设置 Response.BufferOutput = false。

我认为一个在设备上刷新,而另一个只是从内存刷新到设备。

【讨论】:

    猜你喜欢
    • 2019-05-19
    • 1970-01-01
    • 2012-03-04
    • 2012-01-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多