【问题标题】:Download large files from website从网站下载大文件
【发布时间】:2014-12-17 15:59:16
【问题描述】:

我认为这个问题在很多地方都重复出现过。但我想知道不会给服务器带来开销的更好的解决方案。

我的场景是用户应该能够点击网站中的链接,该链接将从服务器获取正确的文件并将其发送给用户。

我看到如下解决方案,

string filename1 = "newfile.txt";
string filename = @"E:\myfolder\test.txt";
Response.ContentType = "application/octet-stream";
Response.AddHeader("Content-Disposition", "attachment; filename=\"" + filename1 + "\"");
Response.TransmitFile(filename);

和下面的帖子一样,

Download/Stream file from URL - asp.net

【问题讨论】:

  • 您尝试了哪些方法,但它是如何不起作用的? “不会给服务器带来开销的更好解决方案”是什么意思?如果您链接到一个文件,单击该链接通常会下载该文件。
  • MVC 是 ASP.NET 的一部分。也许您的意思是您使用的是 Web 窗体而不是 MVC。如果你不向我们展示你是如何获取文件并将它们发送给客户端的,那么你很难知道你有多少开销。
  • 我已经编辑了这个问题,这两种解决方案都在开发服务器中工作。但是我想知道当多个用户下载文件并且文件很大时,哪一个在生产环境中表现更好。
  • @blue 您需要自己进行测试以确定哪个更合适。

标签: asp.net streaming large-files


【解决方案1】:

我发现您提到的两种方法之间的差异是: 1.使用Response.TransmitFile 2.使用Response.WriteFile

为了比较这两种方法,您应该查看以下链接:

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

WriteFile 将指定文件直接写入 HTTP 响应输出流。

很明显,Response.TransmitFile() 将文件发送到客户端机器而不将其加载到服务器上的应用程序内存中,但Response.WriteFile() 方法将正在下载的文件加载到服务器的应用程序内存区域中。

我会说单独使用 Response.TransmitFile() 来处理更大的文件。

但是,在做出最终决定之前,您需要了解这对您应用程序的其他部分有何影响。

这已在各种论坛上进行了相当全面的讨论。寻找它。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-07-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-05-09
    相关资源
    最近更新 更多