【问题标题】:Filedownload with low memory even with big files即使是大文件,文件下载也具有低内存
【发布时间】:2023-03-10 23:25:01
【问题描述】:

我需要授予用户访问受限文件的权限。正在考虑使用通用网络处理程序进行此操作。

文件可以变得非常大,至少 1.5GB。

我们需要使用尽可能少的 RAM/内存来提供这些文件。

目前我们正在将其视为解决方案:

request.ContentType = "text/plain";
request.ContentLength = byteArray.Length;
Stream dataStream = request.GetRequestStream();
int buffersize = 65536;
byte[] buffer = new byte[buffersize];
using (StreamReader reader = new StreamReader(filename))
{
   int count = 0;
   while (true)
   {
        int count = reader.Read(buffer, 0, buffersize);
        dataStream.Write(buffer, 0, count);
        if (count < buffersize) break;
   }
}

这对我们有用吗?

有更好的解决方案吗?

我们需要注意什么?

不能直接通过 IIS 共享文件。处理程序需要控制谁可以访问,谁不能。

【问题讨论】:

  • 不要使用 StreamReader。它仅用于文本文件,此处不需要/不需要。

标签: c# asp.net filestream generic-handler


【解决方案1】:

您需要使用HttpResponse.TransmitFile 方法。这不会在内存中缓冲文件,但您仍然可以获得所需的所有控件。

【讨论】:

  • 所以基本上很简单,比如:Response.ContentType = "application/pdf"; Response.TransmitFile(@"test.pdf");响应。结束(); ?
  • 你应该跳过Response.End - 让处理程序正常完成。
猜你喜欢
  • 1970-01-01
  • 2011-04-29
  • 1970-01-01
  • 1970-01-01
  • 2018-11-16
  • 2012-03-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多