在MVC 3中将byte[]转换为文件类型

4
在我的MVC应用程序中,我最近配置了一个页面,允许上传任意文件类型(有某些限制,不适用于此问题)。我将文件以字节数组的形式存储在数据库中,存储的文件类型基于文件扩展名(请不要尝试为我提供更好的存储这些文件的选项,我非常清楚,在数据库中存储文件不是一种好的实践方法,但我们有一个约束,需要使用SQL Server持续存在这些文件)。正如我所说,为了使情况更糟,我将文件的字节数组存储在数据库中类型为text的列中。这样做只是为了避免使用varbinary类型时出现的限制。
我想知道的是,当请求文件时,在MVC中将这些文件以指定的文件扩展名返回给用户的最佳方式是什么?
我之前用过Excel文件和控制器上的“GET”操作的AJAX调用来完成这个操作,但我想知道是否有更好的方法来实现它。
有任何建议吗?
例如:如果我有以下代码
string fileExtension = /*Some File Extension*/
byte[] data = MyDataContext.DocumentTable.First(p => p.DocumentUID == id);

我该如何使用最初保存的 fileExtension,将此数据以指定的文件格式返回给用户呢? 编辑:我猜 FileResult 是实现这一目标最简单的方法之一。
1个回答

8
您将返回一个FileContentResult

在您的控制器中,可以这样实现:

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

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接