MVC 3中的byte 到文件类型

在我的MVC应用程序中,我最近配置了一个页面,允许上传任意文件类型(某些限制不适用于此问题)。

我将文件作为数据类型byte []存储在数据库中,存储的文件类型基于文件扩展名(请不要试图给我一个更好的选项来存储这些文件,我很清楚存储文件在数据库不是一个好习惯,但我们有一个约束,要求我们使用SQL Server持久保存这些文件。)

正如我所说,为了使这更糟糕,我将文件的byte []数组存储在数据库类型为text的列中。 这只是这样做,所以我不必担心varbinary类型的限制。

我想知道的是,当请求文件时,MVC将这些文件返回给具有指定文件扩展名的用户的最佳方法是什么?

我之前已经能够使用excel文件和AJAX调用我的控制器上的“GET”操作,但我想知道是否有更好的方法来执行此操作。

有什么建议?

示例:如果我有以下代码

string fileExtension = /*Some File Extension*/ byte[] data = MyDataContext.DocumentTable.First(p => p.DocumentUID == id); 

然后,我如何使用最初保留的fileExtension以指定的文件格式将此数据返回给用户。

编辑我猜测FileResult将是实现这一目标的最简单方法之一。

您将返回FileContentResult

在你的控制器中,这样的事情:

  byte[] data = MyDataContext.DocumentTable.First(p => p.DocumentUID == id); return File(data, "text/plain", "myfile.txt"); 

除了文件的扩展名,您还需要为其指定名称。 第二个参数是MIME类型。 这对于某些浏览器(如FireFox)来说非常重要,可以确定打开文件的应用程序。 Firefox将优先于扩展名的MIME类型。