FileContentResult和FileStreamResult之间的区别

时间:2015-12-28 17:45:08

标签: c# asp.net-mvc file

我正在编辑一些代码,有一种方法返回FileContentResult类型。我从服务中获得了一个流,所以对我而言,将返回类型更改为FileStreamResult会更方便。

我应该将流转换为数组以返回FileContentResult吗?

或者我可以安全地更改返回类型吗?

2 个答案:

答案 0 :(得分:26)

FileStreamResultFileContentResult都继承自FileResult的{​​{1}}。因此,您可以从具有ActionResult作为返回类型的方法返回一种类型

如果您已有,则可以使用ActionResult构造函数返回FileStreamResult

FileResult

如果您已经有字节arrray ,则可以使用public ActionResult Download() { var f = Server.MapPath("~/Content/mypdf.pdf"); var fileStream = new FileStream(f,FileMode.Open,FileAccess.Read); return new FileStreamResult(fileStream, MimeMapping.GetMimeMapping(f)); } 构造函数返回FileContentResult

FileResult

public ActionResult Download() { var f = Server.MapPath("~/Content/mypdf.pdf"); var bytes = System.IO.File.ReadAllBytes(f); return new FileContentResult(bytes, MimeMapping.GetMimeMapping(f)); } 方法有重载,它接受字节数组或流

Controller.File

如果浏览器支持显示响应的内容类型,则响应将显示在浏览器中。例如,对于上面的代码,它将在浏览器中显示pdf内容。

public ActionResult Download() { var f = Server.MapPath("~/Content/mypdf.pdf"); var bytes = System.IO.File.ReadAllBytes(f); return File(bytes, MimeMapping.GetMimeMapping(f)); } public ActionResult Download2() { var f = Server.MapPath("~/Content/mypdf.pdf"); var fileStream = new FileStream(f, FileMode.Open, FileAccess.Read); return File(fileStream, MimeMapping.GetMimeMapping(f)); } 方法的另一个重载是获取浏览器的保存/下载对话框将使用的下载文件名,以便用户可以将其保存到本地计算机和/或打开。

File

有了这个,用户将从浏览器获得下载提示。

答案 1 :(得分:23)

FileResult是所有其他人的抽象基类。

  • FileContentResult - 当你有一个字节数组时使用它 喜欢作为文件返回
  • FileStreamResult - 您打开了一个流,您想要返回它 内容作为文件