MVC 3中的byte []到文件类型

时间:2011-10-01 02:46:40

标签: c# asp.net-mvc asp.net-mvc-3

在我的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 将是实现此目标的最简单方法之一。

1 个答案:

答案 0 :(得分:8)

您将返回FileContentResult

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

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

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