byte [] в тип файла в MVC 3 - PullRequest
       4

byte [] в тип файла в MVC 3

4 голосов
/ 01 октября 2011

В моем приложении MVC я недавно настроил страницу, чтобы разрешить загрузку файла произвольного типа (с некоторыми ограничениями, которые не относятся к этому вопросу).

Я храню файл как тип данных byte [] в базе данных, с типом хранимых файлов, основанным на расширении файла (Пожалуйста, не пытайтесь дать мне лучший вариант для хранения этих файлов, я хорошо знаю, что файлы в базе данных не очень хорошая практика, но у нас есть ограничение, которое требует, чтобы мы сохранили эти файлы с помощью SQL Server.)

Как я уже говорил, чтобы сделать это еще хуже, я храню массив байтов [] файла в столбце в базе данных, который имеет тип text . Это сделано только для того, чтобы я не беспокоился об ограничениях с типом varbinary.

Что я хочу знать, так это то, что при запросе файла наилучший способ в MVC вернуть эти файлы пользователю с указанным расширением файла?

Я мог сделать это раньше с файлами Excel и AJAX-вызовом действия «GET» на моем контроллере, но я хочу знать, есть ли лучший способ сделать это.

Есть предложения?

Пример: если у меня есть следующий код

string fileExtension = /*Some File Extension*/
byte[] data = MyDataContext.DocumentTable.First(p => p.DocumentUID == id);

Как я могу затем вернуть эти данные пользователю в указанном формате файла, используя fileExtension , который был изначально сохранен.

РЕДАКТИРОВАТЬ Я предполагаю, что FileResult будет одним из самых простых способов сделать это.

1 Ответ

8 голосов
/ 01 октября 2011

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

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

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...