Squeak.ru - шаблоны программирования

Какое изображение следует использовать в моей модели, когда цель состоит в том, чтобы отобразить это изображение в представлении?

Я нахожусь в ситуации, когда я храню изображения в виде массивов байтов в базе данных SQL. Я использую EF, поэтому в моей модели есть автоматическое свойство массива байтов, которое затем сначала фиксируется в базе данных с помощью кода.

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

  1. Какое изображение следует использовать? Должен ли это быть образ System.Drawing или более новый BitmapImage?
  2. Не вызовет ли это каких-либо проблем с code-first и EF?

Я могу опубликовать код, если хотите, но я не думаю, что это необходимо, если кто-то хочет увидеть мой код, просто оставьте комментарий.


  • Вы хотите выполнить какую-либо обработку изображения после преобразования массива байтов? Или единственная цель - показать это с помощью <img>? Потому что вы можете сделать это без какого-либо преобразования... с введением ImageController с методом Show, который напрямую обслуживает ваши изображения из базы данных в представление без какого-либо преобразования 03.02.2013
  • @nemesv Спасибо, в конце концов я нашел WebImage и использовал его, он принимает массив байтов в одном из своих конструкторов, и Razor, похоже, нравится, еще раз спасибо! 03.02.2013

Ответы:


1

1) Какое изображение мне следует использовать? Должен ли это быть образ System.Drawing или более новый BitmapImage?

Никто из них. Вы должны использовать массив байтов (byte[]).

2) Вызовет ли это какие-либо проблемы с кодом и EF?

Я так не думаю. Я не эксперт по EF, но я думаю, что должна быть возможность сопоставить свойство byte[] с соответствующим столбцом varbinary(max) в вашей базе данных.

Теперь вернемся к вашему первоначальному вопросу о показе изображения и наличии свойства в вашей модели представления. Даже если вы это сделаете, вы не сможете отобразить это свойство массива байтов как изображение внутри вашего представления, если вы не используете data uri scheme, который не поддерживается всеми браузерами. Вот как это может выглядеть, если вы решите пойти по этому пути:

@model MyViewModel
...
<img src="data:image/png;base64,@Html.Raw(Convert.ToBase64String(Model.Image))" alt="some image">

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

Возьмем пример:

public ActionResult Image(int id)
{
    byte[] imageData = ... go query your database to retrieve the corresponding
                           image record using the id
    return File(imageData, "image/png");
}

а затем внутри вашего основного представления просто укажите тег <img> на это действие контроллера:

@model MyViewModel
...
<img src="@Url.Action("Image", "SomeController", new { id = Model.Id })">
03.02.2013
  • Большое спасибо, я боролся с классом WebImage, прежде чем вы ответили на вопрос, теперь я пойду по этому пути. 03.02.2013
  • Новые материалы

    Угловая структура архитектуры
    Обратите внимание, что эта статья устарела, я решил создать новую с лучшей структурой и с учетом автономных компонентов: https://medium.com/@marekpanti/angular-standalone-architecture-b645edd0d54a..

    «Данные, которые большинство людей используют для обучения своих моделей искусственного интеллекта, поставляются со встроенным…
    Первоначально опубликовано HalkTalks: https://hacktown.com.br/blog/blog/os-dados-que-a-maioria-das-pessoas-usa-para-treinar-seus-modelos-de-inteligencia-artificial- ja-vem-com-um-vies-embutido/..

    Сильный ИИ против слабого ИИ: различия парадигм искусственного интеллекта
    В последние годы изучению и развитию искусственного интеллекта (ИИ) уделяется большое внимание и прогресс. Сильный ИИ и Слабый ИИ — две основные парадигмы в области искусственного интеллекта...

    Правильный способ добавить Firebase в ваш проект React с помощью React Hooks
    React + Firebase - это мощная комбинация для быстрого и безопасного создания приложений, от проверки концепции до массового производства. Раньше (знаете, несколько месяцев назад) добавление..

    Создайте API с помощью Python FastAPI
    Создание API с помощью Python становится очень простым при использовании пакета FastAPI. После установки и импорта вы можете создать приложение FastAPI и указать несколько конечных точек. Каждой..

    Веселье с прокси-сервером JavaScript
    Прокси-серверы JavaScript — это чистый сахар, если вы хотите создать некоторую общую логику в своих приложениях, чтобы облегчить себе жизнь. Вот один пример: Связь клиент-сервер Мы..

    Получить бесплатный хостинг для разработчиков | Разместите свой сайт за несколько шагов 🔥
    Статические веб-сайты — это веб-страницы с фиксированным содержанием и его постоянным содержанием. Но теперь статические сайты также обрабатывают динамические данные с помощью API и запросов...