Преобразование байт-массива в изображение и отображение в режиме просмотра бритвы
Я использую EF 4.1 Code First и для простоты, допустим, у меня есть следующий класс Entity:
public class Person
{
public int Id { get; set; }
public string Name { get; set; }
public Byte[] Image { get; set; }
}
Мне удалось создать рабочий Create View, который позволяет добавить объект Person в базу данных.
Но когда я прихожу, чтобы показать детали для Лица, я застрял при отображении Image. После поиска Google в течение многих часов у меня есть следующее:
// 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;
}
И в представлении, где я пытаюсь перечислить детали Person, у меня есть следующее, чтобы отобразить изображение:
<img src="@Html.Action("getImg", "Person", new { id = item.Id })" alt="Person Image" />
Однако выше не работает, мой источник изображения [src] возвращает пустой.
Я бы высоко оценил некоторую помощь с отображением моих изображений.
Спасибо.
Ciwan.
Ответы
Ответ 1
Вот так:
<img src="@Url.Action("getImg", "Person", new { id = item.Id })" alt="Person Image" />
Вам нужно Url.Action
, а не Html.Action
, потому что вы просто хотите сгенерировать URL-адрес для действия GetImg
. Html.Action
делает что-то совершенно другое.
Ответ 2
Есть еще более простой способ сделать это, если у вас уже есть образ, загруженный в вашу модель:
<img src="data:image;base64,@System.Convert.ToBase64String(Model.Image)" />
Для этого вам не нужно снова обращаться к серверу, чтобы получить изображение byte[]
из базы данных, как вы это делаете.
Ответ 3
Я обнаружил, что лучший способ отображать динамически загруженное изображение SVG из свойства Model на странице Razor MVC - использовать Html.DisplayFor(..) в сочетании с .ToHTMLString(). Для моего случая, есть базовая 64 SVG Image + XML-строка данных, хранящаяся в свойстве модели с именем Image. Вот мой код:
<img src='@Html.DisplayFor(model => model.Image).ToHtmlString()' />
Казалось, это единственный способ получить изображение SVG для корректного отображения в Chrome, FireFox и IE.
Приветствия