2011-09-26 22 views
36

estoy usando EF 4.1 Código Primera y en aras de la simplicidad, vamos a decir que tengo la siguiente clase de Entidad:Convertir matriz de bytes de imagen y mostrarla en la maquinilla de afeitar Ver

public class Person 
{ 
    public int Id { get; set; } 
    public string Name { get; set; } 
    public Byte[] Image { get; set; } 
} 

He conseguido crear una vista de creación de trabajo que permite la adición de un objeto de persona a la base de datos.

Pero cuando voy a mostrar los detalles de una persona, que se atascan en la visualización de la imagen. Después de buscar en Google por muchas horas, tengo el siguiente:

// To convert the Byte Array to the author Image 
public FileContentResult getImg(int id) 
{ 
    byte[] byteArray = DbContext.Persons.Find(id).Image; 
    return byteArray != null 
     ? new FileContentResult(byteArray, "image/jpeg") 
     : null; 
} 

Y en la vista de donde yo estoy tratando de enumerar los datos de la persona, Tengo el siguiente para obtener la imagen a pantalla:

<img src="@Html.Action("getImg", "Person", new { id = item.Id })" alt="Person Image" /> 

Sin embargo, lo anterior es que no funciona, mi fuente de imagen [src] el atributo devuelve vacío.

Me gustaría agradecería mucho la ayuda con hacer que mis imágenes se muestren.

Gracias.

Ciwan.

Respuesta

35

De esta manera:

<img src="@Url.Action("getImg", "Person", new { id = item.Id })" alt="Person Image" /> 

Usted necesita Url.Action y no Html.Action, ya que sólo desea generar una URL a la acción GetImg. Html.Action hace algo entirely different.

+2

impresionante, parece que funciona ahora, gracias ** ** Darin :) – Ciwan

+0

Pero lo que si se trata de matriz de bytes de algún archivo PDF. ¿Cómo podemos mostrar un enlace para obtener una vista previa o puede ser un enlace para descargar el pdf? . – Unbreakable

+0

¿Qué pasa si no es una imagen? ¿Cómo podemos manejar eso? Obviamente no podemos poner img src tag para pdf – Unbreakable

54

Hay una manera más fácil de hacer esto si ya sucede que tiene la imagen de carga en su modelo:

<img src="data:image;base64,@System.Convert.ToBase64String(Model.Image)" /> 

Haciendo de esta manera no es necesario ir al servidor de nuevo para ir a buscar la imagen byte[] de la base de datos mientras lo hace.

+0

Esto funciona, pero hay un límite de 32 KB en IE8 – refactor

+0

Pero, ¿qué es un archivo pdf o un archivo de palabras?¿Cómo podemos mostrar un enlace de una vista previa del contenido en código de afeitar. proporcionado en la acción del controlador tenemos la matriz de bytes. – Unbreakable

0

Encontré que la mejor manera de mostrar una imagen SVG cargada dinámicamente desde una propiedad de modelo en una página de Razor MVC es usar Html.DisplayFor (..) en combinación con .ToHTMLString(). En mi caso, tenga una cadena base 64 de datos SVG Image + XML almacenada en la propiedad del modelo llamada Image. Aquí está mi código:

<img src='@Html.DisplayFor(model => model.Image).ToHtmlString()' /> 

Esta parecía ser la única forma que era capaz de conseguir la imagen SVG para mostrar correctamente en Chrome, Firefox e IE.

Saludos

Cuestiones relacionadas