Отображение изображения базы данных (байтов []) в Razor / MVC3?

Я возвращаю набор данных из моей базы данных MS SQL 2008R2, который содержит таблицу данных, из которой я уже получаю данные в моем представлении Razor. Я добавил поле byte [], которое содержит миниатюру изображения, которое я пытаюсь отобразить в этом представлении.

Поскольку массив байтов относительно мал, я решил, что попытаюсь отобразить массив байтов в строке. Однако после прочтения могут быть некоторые проблемы, связанные с браузером, я отказался от этого.

Создание метода контроллера казалось правильным решением (оба метода найдены здесь ), однако у меня уже есть массив байтов, готовый к просмотру, и мне не нужно делать еще один вызов базы данных. чтобы получить его на основе идентификатора.

Это не работает по очевидным причинам:

... отображение других данных на странице ....

@if (Model.dsResults.Tables[0].Rows[i]["ImageBytes"] == null)
{
    
}
else
{
    Product Image
}

...

Метод контроллера:

[Authorize]
[AcceptVerbs(HttpVerbs.Get)]
public ActionResult GetImage(byte[] imageBytes)
{
    byte[] byteArray = imageBytes;
    return new FileContentResult(byteArray, "image/jpeg");
}

... как это по сути пытается отправить массив байтов через http.

Итак, мой вопрос: поскольку у меня уже есть массив байтов в моем представлении Razor, как мне его отобразить?

- Обновление -

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

Response.Write((byte[])Model.dsResults.Tables[0].Rows[i]["ImageBytes"]);

Или ...

Stream s = new MemoryStream(((byte[])Model.dsResults.Tables[0].Rows[i]["ImageBytes"]));
System.Drawing.Image img = new System.Drawing.Bitmap(s);

В других сообщениях я читал, что вы должны выполнить Response.Write (byte [] ... )) но в данном случае это не работает.

- ОБНОВЛЕНИЕ -

В моих постоянных поисках эффективности (отсутствие необходимости делать еще один запрос к базе данных) помощник WebImage кажется хорошим кандидатом. Один из его конструкторов примет массив байтов для инициализации класса, а затем, используя метод .Write ("jpeg"), я смогу увидеть изображение.


    @{
        WebImage webImage = new WebImage(((byte[])Model.dsResults.Tables[0].Rows[i]["ImageBytes"]));
        webImage.Write("jpeg");
    }

Проблема с использованием WebImage.Write () заключается в том, что после использования изображение - единственное, что отображается на странице. Есть ли способ отобразить это непосредственно в «элементе управления» на странице представления Razor?

- ОБНОВЛЕНИЕ -

Это продолжает вызывать у меня ошибки ... поэтому я попробовал следующее, которое, как я полагал, может сработать: поскольку это то, что мы делаем из Действия ...

if (Model.dsResults.Tables[0].Rows[i]["ImageBytes"] != DBNull.Value)
{
    var img1 = new FileContentResult(((byte[])Model.dsResults.Tables[0].Rows[i]["ImageBytes"]), "image/jpeg");
    
        
    
}

... не работает.

22
задан Community 23 May 2017 в 10:29
поделиться