2013-05-30 49 views
1

当我从一个MVC操作方法,这会出现以下情况返回FilePathResult(假设,如果它的事项,该文件,其结果点是非常大):ASP.NET MVC:文件响应流?

  1. 文件获取加载其整个存储到服务器的内存中,然后发送到客户端。
  2. 该文件以某种方式流式传输到客户端,使得它不会被完全加载到服务器的内存中。
  3. 别的东西。

如果答案是1,是否可以通过返回不同类型的结果来发送文件,如2所示? “

回答

2

UPDATE:FilePathResult使用response.TransmitFile其中”将指定文件直接写入HTTP响应输出流,而不将其缓冲在内存中“。 Here's the source code for MVC

可以回用FileStreamResult类流数据:

return new FileStreamResult(stream, "application/pdf") 
{ 
    result.FileDownloadName = "somefile.pdf"; 
}; 

或者你可以重定向到像这样的文件:

return Redirect("somefile.pdf"); 
+0

我敢肯定FilePathResult没有做重定向 - 正如msdn文档所说,它“将文件的内容发送到响应”。 – Duncan

+0

@邓肯谢谢,我修复了答案 – bendytree

+0

实际上,'FileStreamResult'似乎不能直接流式传输。它仍然将整个文件复制到内存中。 –