Преобразование байтового массива в изображение и отображение в Razor View - PullRequest
38 голосов
/ 27 сентября 2011

Я использую EF 4.1 Code First и для простоты, скажем, у меня есть следующий класс Entity:

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

Мне удалось создать рабочее представление «Создание», которое позволяет добавлять объект «Человек» в базу данных.

Но когда я прихожу, чтобы показать детали для Человека, я застреваю при отображении Изображения . После поисков в 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;
}

И в представлении, где я пытаюсь перечислить сведения о персоне, у меня есть следующее, чтобы отобразить изображение:

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

Однако вышеописанное не работает , мой источник изображения Атрибут [src] возвращает пустое .

Я бы был бы очень признателен за помощь в получении моих изображений для показа.

Спасибо.

Ciwan.

Ответы [ 3 ]

59 голосов
/ 27 сентября 2013

Есть еще более простой способ сделать это, если у вас уже есть изображение, загруженное в вашу модель:

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

Для этого вам не нужно снова заходить на сервер, просто чтобы получить изображение byte[] из базы данных, как вы делаете.

36 голосов
/ 27 сентября 2011

Как это:

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

Вам нужно Url.Action, а не Html.Action, потому что вы просто хотите сгенерировать URL для действия GetImg. Html.Action делает что-то совершенно иначе .

0 голосов
/ 07 сентября 2017

Я обнаружил, что лучший способ отобразить динамически загруженное изображение SVG из свойства Model на странице Razor MVC - это использовать Html.DisplayFor (..) в сочетании с .ToHTMLString (). Для моего случая, есть базовая строка данных SVG Image + XML, хранящаяся в свойстве модели с именем Image. Вот мой код:

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

Похоже, это был единственный способ получить изображение SVG для правильного отображения в Chrome, FireFox и IE.

Приветствия

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...