【发布时间】:2011-08-30 07:46:06
【问题描述】:
当我们想通过操作提供文件(非 HTML)时,我们可以使用文件操作结果。构造函数可以接受 byte[] 或 Stream。哪一个更好?为什么?
谢谢!
【问题讨论】:
标签: .net asp.net-mvc file stream
当我们想通过操作提供文件(非 HTML)时,我们可以使用文件操作结果。构造函数可以接受 byte[] 或 Stream。哪一个更好?为什么?
谢谢!
【问题讨论】:
标签: .net asp.net-mvc file stream
我会使用流,我会努力将数据流式传输到客户端而不将所有数据加载到网络服务器上的byte[]。
这是确保不会将文件完全加载到服务器内存中的唯一方法,假设有 10 个人下载每个 100 Mb 的文件,最好避免 ASP.NET 进程仅因此而增长到 1GB RAM,通过流媒体,您可以做到这一点:)
【讨论】:
byte[] 完全可以接受(并且可能更方便)。
没有好坏之分,请使用最适合您情况的那个。
例如,如果文件在磁盘上,您很可能会将其加载到流中
var stream = File.OpeanRead("C:\myfile.ext")
把它变成字节数组是没有意义的。
但是,如果您在内存中有一个文件,它可能已经在一个字节数组中。在这种情况下,将其转换为流是没有意义的。
【讨论】:
如果您的文件在磁盘上,您可以使用 FilePathResult : http://msdn.microsoft.com/en-us/library/system.web.mvc.filepathresult.aspx
该类使用 HttpResponse.TransmitFile,它读取文件而不将其缓冲到内存中:http://msdn.microsoft.com/en-us/library/system.web.httpresponse.transmitfile.aspx
【讨论】: