Возвращать байт [], представляющий изображение в формате JSON? - PullRequest
2 голосов
/ 22 февраля 2012

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

В настоящее время у меня есть следующий код. Он еще не запускался, я просто хотел кое-что обсудить с С.О:

public class ComponentDiagramPolygonChild
{
    IconServicesSoapClient IconServicesProxy = new IconServicesSoapClient("IconServicesSoap");

    public string Name { get; set; }
    public byte[] Icon { get; set; }

    public ComponentDiagramPolygonChild(PlanViewComponent planViewComponent)
    {
        Name = planViewComponent.Name;
        //TODO: Can icon ever return null here?
        Icon = IconServicesProxy.GetIconByID(planViewComponent.Icon).Image;
        planViewComponent.
    }
}

Мне кажется, у меня есть два варианта:

  • Сохранить идентификатор значка как свойство вместо байта [].
  • Сохранить иконку как байт [].

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

Если я воспользуюсь последним предложением, я буду передавать (значительно?) Больший объем данных по сети. Я не уверен, что байтовые массивы могут быть JSONized должным образом. Я не уверен, как взять jsonized байт [] и преобразовать его в данные изображения.

У кого-нибудь есть опыт в этой ситуации? Как я должен заняться этим? Благодаря.

РЕДАКТИРОВАТЬ: После некоторого чтения, похоже, что первый вариант - мой лучший выбор.

1 Ответ

2 голосов
/ 22 февраля 2012

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

Вы можете сделать это с версией изображения в кодировке base64, и большинство современных браузеров будут поддерживатьтот.Вы также можете сделать это с объектом HTML5 canvas. Документация доступна на MDN .

Однако с практической точки зрения наиболее приемлемым решением является использование идентификатора и предоставление ему отдельного HTTP-запроса.HTML 5 не требуется, поддерживается практически всеми используемыми браузерами, и вы можете повторно использовать существующие системы доставки изображений.

Если ваш сервер настроен, будет нормально иметь дополнительный HTTP-запрос для изображения, иесли вы будете делать много таких образов, нагрузка на сервер будет намного меньше.

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