ASP.NET有四种不同类型的文件结果:
将二进制内容发送到响应
这些描述取自MSDN,除了FileStreamResult之外,前三个听起来是一样的。那么它们之间的区别是什么呢?
发布于 2009-07-27 09:29:58
FileResult
是所有其他类的抽象基类。
FileContentResult
-当您有一个想要作为fileFilePathResult
返回的字节数组时使用它-当您在磁盘上有一个文件并想要返回其内容时(您提供了一个path)FileStreamResult
-您打开了一个流,您想要以文件的形式返回其内容
但是,您很少需要使用这些类--您可以只使用其中一个Controller.File
重载,让ASP.NET MVC为您变魔术。
发布于 2013-05-21 22:55:51
伟大的question...and应该有更多的细节。我发现自己在这里是一个有趣的情况的结果。我们通过MVC3/C#环境交付了一些pdf附件。我们的代码发布了,我们开始从我们的客户那里得到一些响应,当他们使用Chrome时,下载行为异常,文件类型被转换为'pdf-,attachment.pdf-,附件‘。Yup...you得到了it...the的整件事。因此,可以将其重写为“pdf”,文件仍将保存完好,但这真是一团乱!
因此,为了描述初始情况,我们设置了“Content-Disposition”标头,然后返回一个FileContentResult……
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设置器):
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绝对是一个很好的了解。
https://stackoverflow.com/questions/1187261
复制相似问题