Отображение изображения из базы данных в asp mvc
Я получаю изображение в формате массива байтов от контроллера, как я могу отобразить это в представлении? самым простым способом.
5 ответов:
создайте контроллер для отображения изображений с действием Show, которое принимает идентификатор изображения для отображения из базы данных. Действие должно возвращать FileResult, содержащий данные изображения с соответствующим типом контента.
public class ImageController : Controller { public ActionResult Show( int id ) { var imageData = ...get bytes from database... return File( imageData, "image/jpg" ); } }
в вашем представлении создайте изображение и используйте идентификатор изображения, чтобы построить путь для изображения с помощью контроллера и действия.
<img src='<%= Url.Action( "show", "image", new { id = ViewData["imageID"] } ) %>' />
принятый ответ использования этого:
<img src='<%= Url.Action( "show", "image", new { id = ViewData["imageID"] } ) %>'
это нормально, но устарело для mvc 4. Обновленный синтаксис теперь должен гласить:
<img src='@Url.Action( "show", "image", new { id = ViewData["imageID"] })' />
кроме того, я считаю, что когда мне нужна эта функциональность, я уже передаю другие данные в представление, поэтому приятно использовать модель вместо ViewData.
public class MyModel { public string SomeData {get;set;} public int FileId {get; set;} }
из вашего контроллера:
public ActionResult Index() { MyEntity entity = fetchEntity(); MyModel model = new MyModel { SomeData = entity.Data, FileId = entity.SomeFile.ID }; return View(model); }
наконец, с вашей точки зрения:
<img src='@Url.Action("show", "image", new { id = Model.FileId })' />
метод "Show" на контроллере для принятого ответ будет работать, но я бы изменил жестко закодированное "изображение / jpg" для использования файла.ContentType-вы можете сохранить это вместе с byte [], поэтому вам не нужно угадывать, загружают ли пользователи свои собственные изображения.
Я знаю, что этот пост довольно старый, но он был одним из первых, который появился, когда я пытался выяснить, как это сделать, по большей части ответ Augi был правильным, но большинство сборок устарели
я загружаю mvc2 preview 1
не нужно беспокоиться о Microsoft.сеть.MVC вещи я не мог найти ничего из этого материала в любом случае и искать около часа, пытаясь выяснить, что он эволюционировал в
это код, который я написал, что работает для меня для отображения изображения из поля БД изображения типа
в моем классе контроллера, который я назвал магазин, у меня это
public ActionResult GetImage(int id) { byte[] imageData = storeRepository.ReturnImage(id); //instead of what augi wrote using the binarystreamresult this was the closest thing i found so i am assuming that this is what it evolved into return new FileStreamResult(new System.IO.MemoryStream(imageData), "image/jpeg"); } //in my repository class where i have all the methods for accessing data i have this public byte[] ReturnImage(int id) { // i tried his way of selecting the right record and preforming the toArray method in the return statment // but it kept giving me an error about converting linq.binary to byte[] tried a cast that didnt work so i came up with this byte[] imageData = GetProduct(id).ProductImage.ToArray(); return imageData; }
теперь для моей страницы просмотра я попробовал все виды способов, которые я нашел в этих формах, и ничего не сработало, я предполагаю, что они просто устарели, поэтому я попробовал по прихоти самую простую вещь, о которой я мог думать, и она работала отлично
<image src='/store/getimage/<%= Html.Encode(Model.productID) %>' alt="" />
Я продолжал получать ошибка с сайта о публикации тегов img поэтому убедитесь, что вы изменили изображение выше на img
надеюсь, что это поможет остановить кого-либо от охоты весь день для текущего ответа
http://aspnet.codeplex.com/Release/ProjectReleases.aspx?ReleaseId=30886
public ActionResult EmployeeImage(int id) { byte[] imageData ="Retrieve your Byte[] data from database"; if (imageData!= null && imageData.Length > 0) { return new FileStreamResult(new System.IO.MemoryStream(imageData), "image/jpeg"); } }
предполагая, что у вас есть dataRow (dr) с двумя столбцами, "name" и "binary_image" (binary_image содержит двоичную информацию)
Byte[] bytes = (Byte[])dr["Data"]; Response.Buffer = true; Response.Charset = ""; Response.Cache.SetCacheability(HttpCacheability.NoCache); Response.ContentType = dr["Image/JPEG"].ToString(); Response.AddHeader("content-disposition", "attachment;filename=" & dt.Rows[0]["Name"].ToString()); Response.BinaryWrite(bytes); Response.Flush(); Response.End();