#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-тип расширению.