首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >在ASP.NET MVC中四种文件结果有什么不同

在ASP.NET MVC中四种文件结果有什么不同
EN

Stack Overflow用户
提问于 2009-07-27 09:25:12
回答 2查看 47.4K关注 0票数 141

ASP.NET有四种不同类型的文件结果:

  • FileContentResult:将二进制文件的内容发送到response.
  • FilePathResult:将文件的内容发送到response
  • FileResult:返回二进制输出以写入响应
  • FileStreamResult:使用流实例

将二进制内容发送到响应

这些描述取自MSDN,除了FileStreamResult之外,前三个听起来是一样的。那么它们之间的区别是什么呢?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2009-07-27 09:29:58

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

  • FileContentResult -当您有一个想要作为file
  • FilePathResult返回的字节数组时使用它-当您在磁盘上有一个文件并想要返回其内容时(您提供了一个path)
  • FileStreamResult -您打开了一个流,您想要以文件

的形式返回其内容

但是,您很少需要使用这些类--您可以只使用其中一个Controller.File重载,让ASP.NET MVC为您变魔术。

票数 186
EN

Stack Overflow用户

发布于 2013-05-21 22:55:51

伟大的question...and应该有更多的细节。我发现自己在这里是一个有趣的情况的结果。我们通过MVC3/C#环境交付了一些pdf附件。我们的代码发布了,我们开始从我们的客户那里得到一些响应,当他们使用Chrome时,下载行为异常,文件类型被转换为'pdf-,attachment.pdf-,附件‘。Yup...you得到了it...the的整件事。因此,可以将其重写为“pdf”,文件仍将保存完好,但这真是一团乱!

因此,为了描述初始情况,我们设置了“Content-Disposition”标头,然后返回一个FileContentResult……

代码语言:javascript
复制
var cd = new System.Net.Mime.ContentDisposition
            {
                FileName = result.Attachment.FileName,
                Inline = false
            };
            Response.AppendHeader("Content-Disposition", cd.ToString());

return File(result.Attachment.Data, MimeExtensionHelper.GetMimeType(result.Attachment.FileName), result.Attachment.FileName);

看起来不错。在IE中工作正常。所以我做了一些研究,并尝试实现FileStreamResult (保留Content-Disposition设置器):

代码语言:javascript
复制
MemoryStream dataStream = new MemoryStream();
dataStream.Write(result.Attachment.Data, 0, result.Attachment.Data.Length);
dataStream.Position = 0;
return new FileStreamResult(dataStream, MimeExtensionHelper.GetMimeType(result.Attachment.FileName));

它修复了Chrome中的问题!Hmmm...but为什么我必须拿着我完美的字节数组,流式传输它,然后通过这个返回它,才能让文件名正常工作?

然后是小提琴手。

使用FileContentResult,我在标题中得到了2个内容处置。对于FileStreamResult,我得到了1。

FileContentResult在提供文件名时会附加一个Content-Disposition头部,并将该头部的倍数视为错误。

奇特的reaction...but绝对是一个很好的了解。

票数 31
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1187261

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档