如何使用ASP.NET C#即时执行下载?
我们有大量的数据需要下载 目前我们的系统只输出流(我们不使用文件) 代码: HttpContext.Current.Response.AppendHeader(“内容处置”,String.Format(“附件;文件名={0}”,文件名)); HttpContext.Current.Response.BinaryWrite(ms.ToArray()); HttpContext.Current.Response.End(); 但是,它正在服务器上使用大量内存,等待文件下载。。我想让它立即开始下载,而不是等待。。。如何执行此操作?请尝试设置:如何使用ASP.NET C#即时执行下载?,c#,asp.net,download,httpcontext,C#,Asp.net,Download,Httpcontext,我们有大量的数据需要下载 目前我们的系统只输出流(我们不使用文件) 代码: HttpContext.Current.Response.AppendHeader(“内容处置”,String.Format(“附件;文件名={0}”,文件名)); HttpContext.Current.Response.BinaryWrite(ms.ToArray()); HttpContext.Current.Response.End(); 但是,它正在服务器上使用大量内存,等待文件下载。。我想让它立即开始下载,而
HttpContext.Current.Response.BufferOutput = false;
问题在于
MemoryStream.ToArray
方法,它将整个内容放入web服务器内存中
您应该以不同的方式将内存流传递给
二进制写入,这样您就可以在不需要太多内存的情况下从缓冲和向下流数据到客户端中获益。而不是将整个下载转换为数组,您应该将数据直接从源流复制到目标流
有关在流之间复制的好方法,请参见
从猜测来看,ms
是一个内存流,因此下面应该可以做到这一点:
CopyStream(ms, HttpContext.Current.Response.OutputStream);
更好的做法是直接写入输出流而不是中间流,但是如何执行这一操作取决于如何获取ms
中包含的数据。这个问题或多或少涉及到这一点:您可以添加更多关于为什么应关闭缓冲的解释。当您将数据写入输出缓冲区时,关闭缓冲将数据发送到客户机,而不是等到结束。
CopyStream(ms, HttpContext.Current.Response.OutputStream);