我有一个.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应该在这里诀窍!! ??谁能看到我做错了什么?
由于
答案 0 :(得分:2)
Response.BufferOutput = false;
在开始将数据写入Response流之前将其放入。
答案 1 :(得分:1)
您可能想尝试在while循环中刷新HttpResponse:
while ((theLine = inputStream.ReadLine()) != null)
{
streamWriter.WriteLine(theLine);
streamWriter.Flush();
Response.Flush();
}