【问题标题】:ASP.NET - Does streaming file to the client occupy server memory?ASP.NET - 流式传输文件到客户端是否占用服务器内存?
【发布时间】:2013-03-14 14:17:55
【问题描述】:

我需要通过运行在 Web 服务器上的应用程序使文件服务器中的文件可供下载。用户将单击应用程序页面上可用的链接,然后会出现另存为对话框。这种用例很常见,我可能在谈论一个基本的事情,但如果有人能确认我的以下假设是否正确,我将不胜感激。

1) 对于文件服务器上的文件,通过 Web 服务器中的虚拟目录虚拟映射以供应用程序访问(作为链接),可以使用 content-disposition 将其直接流式传输到客户端(代码类似回答here),意思是不涉及任何代码来处理或分块文件以进行流式传输。

2) 由于文件直接从文件服务器流式传输,因此 Web 服务器在内存或磁盘使用方面不会受到影响(当然会使用 CPU)。

谢谢

【问题讨论】:

  • 这取决于如何流式传输数据。该答案中显示的方法会在文件传输时影响内存,因为所有字节都在内存中读取。显示您正在使用的代码会有所帮助。
  • 我还没有编写任何代码,但打算使用我分享的链接中显示的类似模式。实际上,我正在寻找一种在从文件服务器下载文件时不会干扰 Web 服务器上的内存和磁盘使用的方法。您确定代码会占用“网络服务器”内存吗?这让我大吃一惊。我的理解是因为它直接从文件服务器流式传输,它可能不会占用内存或麻烦Web服务器的磁盘。感谢并感谢您的回答。
  • 实际上,我共享的链接使用来自本地“网络服务器”的文件,但在我的情况下,我打算指向一个虚拟目录,该目录又指向一个文件服务器。在这种情况下,文件服务器磁盘使用率可能会上升(并且可能不是内存),但 Web 服务器磁盘或内存不会受到影响,对吧?谢谢

标签: asp.net download filestream fileserver tfilestream


【解决方案1】:

由于您想直接写入文件并将内存占用降至最低,请考虑使用HttpResponse.TransmitFile

将指定文件直接写入 HTTP 响应输出流, 无需在内存中缓冲。

据我所知,如果您必须通过 asp.net 编写文件,这是在响应中发送文件的最有效方法。

Response.AppendHeader("Content-Disposition", "attachment; filename="+ fileName );
Response.TransmitFile(fullPath);
Response.Flush();
Response.End();

【讨论】:

  • 这正是我可能想做的。谢谢 nunespascal!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-05-17
  • 2010-10-17
  • 1970-01-01
  • 1970-01-01
  • 2014-01-19
相关资源
最近更新 更多