2 votes

Renvoi d'un octet[] représentant une image sous forme de JSON ?

Je crée un objet côté serveur qui doit contenir toutes les données nécessaires pour représenter l'objet côté client. L'une des propriétés que j'aimerais que mon objet client possède est son icône.

Actuellement, j'ai le code suivant. Il n'a pas encore été exécuté, je voulais juste discuter de certaines choses avec S.O :

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.
    }
}

Il me semble que deux options s'offrent à moi :

  • Stocke l'ID de l'icône en tant que propriété au lieu d'un byte[].
  • Stocke l'icône sous la forme d'un octet[].

Si j'utilise la première suggestion, je devrai aller sur le serveur et demander les données de l'image en transmettant au serveur l'ID de l'icône. Je pense qu'il s'agit d'une approche plus simpliste : je renverrais simplement un flux de mémoire contenant l'image et je chargerais ce flux à l'emplacement souhaité. L'aspect négatif de cette approche est la multiplication des requêtes sur le serveur, ce qui semble tout à fait inutile.

Si j'utilise cette dernière suggestion, je transmettrai une quantité de données (significativement ?) plus importante à travers le réseau. Je ne sais pas si les tableaux d'octets peuvent être correctement JSONisés. Je ne sais pas comment prendre un byte[] jsonisé et le convertir en données d'image.

Quelqu'un a-t-il une expérience de cette situation ? Comment dois-je m'y prendre ? Je vous remercie.

EDIT : Après quelques lectures, il semble que la première option soit la meilleure.

2voto

Jordan Points 12780

Je pense que d'un point de vue technique et de programmation, il serait intéressant de renvoyer l'image des données.

Vous pouvez le faire avec une version de l'image encodée en base64, et la plupart des navigateurs modernes le supportent. Vous pouvez également le faire avec l'objet HTML5 canvas. La documentation est disponible sur le MDN .

Cependant, d'un point de vue pratique, la solution la plus facile à maintenir est d'utiliser un identifiant et de le laisser faire une requête HTTP distincte. HTML 5 n'est pas nécessaire, il est pris en charge par pratiquement tous les navigateurs utilisés et vous pouvez réutiliser les systèmes de diffusion d'images existants.

Si votre serveur est bien réglé, cette requête HTTP supplémentaire pour l'image ne posera pas de problème, et la charge de l'unité centrale du serveur sera bien moindre si vous produisez beaucoup de ces images.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X