Mostrar imagen desde la base de datos en asp mvc

Obtengo una imagen en formato de matriz de bytes del controlador. ¿Cómo puedo mostrar esto en la vista? de la manera más simple.

Cree un controlador para mostrar imágenes con una acción Mostrar que toma el ID de la imagen para mostrar desde la base de datos. La acción debería devolver un FileResult que contenga los datos de imagen con el tipo de contenido apropiado.

public class ImageController : Controller { public ActionResult Show( int id ) { var imageData = ...get bytes from database... return File( imageData, "image/jpg" ); } } 

En su opinión, construya la imagen y use la identificación de la imagen para construir una ruta para la imagen usando el controlador y la acción.

  

La respuesta aceptada de usar esto:

  

está bien, pero está desactualizado para mvc 4. La syntax actualizada debe ahora leer:

  

Además, me parece que cuando necesito esta funcionalidad ya estoy pasando otros datos a la vista, por lo que es bueno usar el modelo en lugar de ViewData.

 public class MyModel { public string SomeData {get;set;} public int FileId {get; set;} } 

Desde tu controlador:

 public ActionResult Index() { MyEntity entity = fetchEntity(); MyModel model = new MyModel { SomeData = entity.Data, FileId = entity.SomeFile.ID }; return View(model); } 

Finalmente desde su punto de vista:

  

El método “Mostrar” en el controlador para la respuesta aceptada funcionará, pero cambiaría la “imagen / jpg” codificada para usar File.ContentType; puede almacenar esto junto con el byte [] para que no tenga que adivinar si los usuarios están cargando sus propias imágenes.

Sé que esta publicación es bastante antigua, pero fue una de las primeras que surgió cuando intenté averiguar cómo hacer esto en su mayor parte. La respuesta de Augi fue correcta, pero la mayoría de las asambleas están desactualizadas.

  1. yo descargo mvc2 preview 1

  2. no hay necesidad de preocuparse por las cosas de microsoft.web.mvc. No pude encontrar nada de eso y buscar una hora tratando de descubrir en qué evolucionó.

este es el código que escribí que funciona para mí para mostrar una imagen desde un campo db de tipo imagen

en mi clase de controlador que llamé tienda tengo esto

 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; } 

ahora para mi página de vista probé todas las formas que encontré en estas formas y nada funcionó, supongo que simplemente estaban desactualizadas, así que intenté por un capricho lo más simple que pude pensar y funcionó perfectamente

  

Seguí recibiendo un error del sitio acerca de publicar tags img, así que asegúrate de cambiar la imagen de arriba para img

espero que ayude a detener a cualquiera de cazar todo el día para obtener una respuesta actual

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"); } } 

Asumiendo que tienes un dataRow (dr) con dos columnas, “name” y “binary_image” (binary_image contiene la información binaria)

  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();