Подтвердить что ты не робот

Преобразование байт-массива в изображение и отображение в режиме просмотра бритвы

Я использую 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.

4b9b3361

Ответ 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.

Приветствия