我正在编辑一些代码,有一种方法返回FileContentResult
类型。我从服务中获得了一个流,所以对我而言,将返回类型更改为FileStreamResult
会更方便。
我应该将流转换为数组以返回FileContentResult
吗?
或者我可以安全地更改返回类型吗?
答案 0 :(得分:26)
FileStreamResult
和FileContentResult
都继承自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
- 您打开了一个流,您想要返回它
内容作为文件