在我的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 将是实现此目标的最简单方法之一。
答案 0 :(得分:8)
您将返回FileContentResult
。
在你的控制器中,这样的事情:
byte[] data = MyDataContext.DocumentTable.First(p => p.DocumentUID == id);
return File(data, "text/plain", "myfile.txt");
除了文件的扩展名外,您还需要为其指定名称。第二个参数是MIME类型。这对于某些浏览器(如FireFox)来说非常重要,可以确定打开文件的应用程序。 Firefox将更喜欢扩展名的MIME类型。