【问题标题】:Flush data on Response.outputStream在 Response.outputStream 上刷新数据
【发布时间】:2014-02-21 02:08:18
【问题描述】:

我有一个 .net Web 应用程序,它从 REST 服务中获取一个大文档,该文档应该下载到客户端主机。

我想流式传输数据,以便它看起来直接在客户端上下载。我的问题是“文件下载”对话框在调用 Response.End() 之前不会显示。我希望它立即显示出来。

// class extends System.Web.UI.Page

HttpClient client = new HttpClient();

// Add an Accept header for the mediatype format.
client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue(mediaType));

Stream stream = client.GetStreamAsync("http://www.aaa.se/theurl").Result; 
StreamReader inputStream = new StreamReader(stream);

Response.ContentType = "text/plain";
Response.AppendHeader("Content-Disposition", "attachment; filename=file.txt");

using (StreamWriter streamWriter = new StreamWriter(Response.OutputStream))
        {
            streamWriter.AutoFlush = true;
            string theLine = null;

            while ((theLine = inputStream.ReadLine()) != null)
            {
                streamWriter.WriteLine(theLine);
                streamWriter.Flush(); // <<<---- HERE FileDialog should pop up!
            }

}
Response.End(); // <<<--- BUT it pops up here!

Flush 和 AutoFlush 应该在这里解决问题!??谁能看到我做错了什么?

谢谢

【问题讨论】:

    标签: c# .net streamreader streamwriter flush


    【解决方案1】:
    Response.BufferOutput = false;
    

    在您开始将数据写入响应流之前。

    【讨论】:

      【解决方案2】:

      您可能想尝试在 while 循环中刷新 HttpResponse:

      while ((theLine = inputStream.ReadLine()) != null)
      {
              streamWriter.WriteLine(theLine);
              streamWriter.Flush(); 
              Response.Flush();
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2013-07-28
        • 1970-01-01
        • 1970-01-01
        • 2020-04-27
        • 2011-06-16
        • 1970-01-01
        • 2011-08-22
        相关资源
        最近更新 更多