在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将是完成此操作的最简单方法之一
您将返回一个FileContentResult
。
在你的控制器中,像这样:
byte[] data = MyDataContext.DocumentTable.First(p => p.DocumentUID == id);
return File(data, "text/plain", "myfile.txt");
除了文件的扩展名之外,还需要为它指定一个名称。第二个参数是MIME类型。对于某些浏览器(如FireFox)来说,这对于确定使用哪个应用程序打开文件非常重要。Firefox将优先选择MIME类型而不是扩展名。