байт [] для типа файла в MVC 3

#c# #asp.net-mvc #asp.net-mvc-3

#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:

Вы бы вернули a FileContentResult .

В вашем контроллере что-то вроде этого:

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

В дополнение к расширению файла, вам также необходимо указать его имя. 2-й параметр — это тип MIME. Это важно для некоторых браузеров (например, FireFox), чтобы определить, с помощью какого приложения открывать ваш файл. Firefox предпочтет MIME-тип расширению.