刷新Response.outputStream上的数据

时间:2014-01-29 10:28:26

标签: c# .net streamreader streamwriter flush

我有一个.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应该在这里诀窍!! ??谁能看到我做错了什么?

由于

2 个答案:

答案 0 :(得分:2)

Response.BufferOutput = false;

在开始将数据写入Response流之前将其放入。

答案 1 :(得分:1)

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

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