ASP.NET有四种不同类型的文件的结果:
- FileContentResult:发送一个二进制文件到响应的内容。
- FilePathResult:发送文件的内容,以响应
- FileResult:返回二进制输出写入响应
- FileStreamResult:通过使用流实例发送二进制内容的响应
这些描述采取从MSDN并与FileStreamResult除外的前三个声音相同。 那么它们之间有什么区别呢?
ASP.NET有四种不同类型的文件的结果:
这些描述采取从MSDN并与FileStreamResult除外的前三个声音相同。 那么它们之间有什么区别呢?
FileResult
是所有其他人的抽象基类。
FileContentResult
-您使用它,当你有一个字节数组,你想退回的文件 FilePathResult
-当你有一个磁盘文件,并想返回其内容(你给一个路径) FileStreamResult
-你有流开,你想它的内容返回为一个文件 然而,你很少有使用这些类-你可以只使用一个Controller.File
过载,并让ASP.NET MVC做魔术给你。
大问题...,值得更多的细节。 我发现自己这里的一个有趣的情况的结果。 我们通过MVC3 / C#环境提供一些PDF附件。 我们的代码得到释放,我们开始收到来自我们的客户,在下载举止异常,当他们使用Chrome和文件类型正在转换到“PDF-,attachment.pdf-,附件”一些回应。 是啊......你说对了......整个事情。 所以,一个可以重写它仅仅是“PDF”,文件仍然保存完好,但什么乱七八糟的!
所以,来形容最初的情况,我们设定那么“内容处置”头返回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代替(保持内容处置制定者):
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的问题! 嗯......但为什么在赫克我应该把我的完美的字节数组和流,然后通过这个返回它来获取文件名的工作吧?
随后赶来的提琴手。
随着FileContentResult,我在头2内容处分权。 随着FileStreamResult,我得到了1。
FileContentResult提供文件名和Chrome认为这个标题为错误的倍数时,附加一个Content-Disposition头。
奇怪的反应......但肯定一个是很好的了解。