在MVC 3中,byte[]改为文件类型

本文关键字:文件 类型 byte MVC | 更新日期: 2023-09-27 18:10:22

在我的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以指定的文件格式将数据返回给用户?

EDIT我猜FileResult将是完成此操作的最简单方法之一

在MVC 3中,byte[]改为文件类型

您将返回一个FileContentResult

在你的控制器中,像这样:

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

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