gpt4 book ai didi

c# - FileContentResult 和 FileStreamResult 的区别

转载 作者:IT王子 更新时间:2023-10-29 04:40:55 25 4
gpt4 key购买 nike

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

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

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

最佳答案

FileStreamResultFileContentResult 都继承自FileResultFileResult 继承自ActionResult。因此,您可以从以 ActionResult 作为返回类型的方法返回任何一种类型

如果您已经有一个,您可以使用FileStreamResult 构造函数返回一个FileResult

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 方法具有采用字节数组或流的重载

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));
}

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

File 方法还有另一个重载,它采用浏览器的保存/下载对话框将使用的下载文件名,以便用户可以将其保存到本地计算机和/或打开。

public ActionResult Download4()
{
var f = Server.MapPath("~/Content/mypdf.pdf");
var fileStream = new FileStream(f, FileMode.Open, FileAccess.Read);
return File(fileStream, MimeMapping.GetMimeMapping(f),"MyfileNiceFileName.pdf");
}

这样,用户将从浏览器收到下载提示。

关于c# - FileContentResult 和 FileStreamResult 的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34498184/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com