C# 字节[]到MVC 3中的文件类型

C# 字节[]到MVC 3中的文件类型,c#,asp.net-mvc,asp.net-mvc-3,C#,Asp.net Mvc,Asp.net Mvc 3,在我的MVC应用程序中,我最近配置了一个页面,允许上传任意类型的文件(某些限制不适用于此问题) 我将文件存储为数据库中的数据类型byte[],存储的文件类型基于文件扩展名(请不要尝试为我提供更好的存储这些文件的选项,我很清楚在数据库中存储文件不是一个好做法,但我们有一个约束,要求我们使用SQL Server持久化这些文件。) 正如我所说的,更糟糕的是,我将文件的byte[]数组存储在数据库中的一列中,该列的类型为text。这样做只是为了不必担心varbinary类型的限制 我想知道的是,当请求一

在我的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);
然后如何使用最初保存的文件扩展名以指定的文件格式将此数据返回给用户

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

您将返回一个

在控制器中,类似以下内容:

 byte[] data = MyDataContext.DocumentTable.First(p => p.DocumentUID == id);
 return File(data, "text/plain", "myfile.txt");
除了文件的扩展名,还需要为其指定名称。第二个参数是MIME类型。这对于某些浏览器(如FireFox)决定使用哪个应用程序打开文件非常重要。Firefox更喜欢MIME类型而不是扩展