2012-07-04 4 views
1

В моем приложении .Net MVC3 я храню несколько изображений в базе данных SQL Server (они являются .png-файлами). Я бы очень хотел придерживаться этого метода, если это возможно, потому что я предпочитаю работать с базой данных для работы с файловой системой (это небольшая страница, и никто не заметит проблемы с производительностью).Показать изображение с ViewModel

Сохранение изображения в базе данных, кажется, не представляет проблемы. Извлечение данных также не является проблемой. У меня возникают проблемы с отображением изображения в представлении.

Изображение хранится в базе данных SQL Server в виде Varbinary (max). Модель просмотра использует байт [] для хранения информации. View Модель имеет другие данные, хранящиеся в нем, но, насколько образ обеспокоен, вот что я сделал:

контроллер:

ViewModel data = Repository.GetData(); 

//data now holds all of the information that I need for my view 
//data.Image is of type Byte[], and it holds the image I am having trouble displaying. 

return View(data); 

Посмотреть

@model = data 
@Html.DisplayFor(model => model.x) @*works*@ 
@Html.DisplayFor(model => model.Image) @*no good*@ 

ли изображение должно храниться в виде временного файла, чтобы это работало? Если это так, похоже, что хранение изображения в базе данных - просто большая трата времени.

Если я возвращаю FileStreamResult в моей модели:

FileStream fs = new FileStream(path, Open, Read); 
return View(new FileStreamResult(fs, "image/png")); 

.... и меняю модель с моей точки зрения, чтобы быть «FileStreamResult,» Я не могу до сих пор найти не способ отображения изображения.

Но если я возвращаю FileStreamResult так:

FileStream fs = new FileStream(path, Open, Read); 
return new FileStreamResult(fs, "image/png"); 

затем отображается изображение (но я думаю, что это просто браузер «открытие», что файл, а не «делает» как HTML).

Я знаю, что на эту тему уже много, но я посмотрел на них. Я думаю, что мне не хватает фундаментального понимания сети или mvc или чего-то еще.

Спасибо!

ответ

2

И ваш контроллер:

public ActionResult LoadImage(int id) 
    { 
     // load the image from the database and return the filestream 
    } 
+0

Отлично. Я использовал вариант 2, и он отлично работает. Действие LoadImage на моем контроллере возвращает FileContentResult, и изображение отображается. Спасибо. – user1304444

Смежные вопросы