2016-12-02 3 views
0

J'ai une nouvelle instance de Sitecore 8.1 prête à fonctionner. Sitecore charge les images via un gestionnaire de média avec des URL comme: "/-/media/Images/FOLDER/IMAGENAME.jpg". Le gestionnaire de médias Sitecore doit être exécuté pour pouvoir trouver l'image dans la base de données Sitecore, puis renvoyer le fichier image réel (l'image n'existe pas sur le disque). Je n'ai jamais pu obtenir ImageResizer pour traiter des images Sitecore puisque Sitecore va voler la requête plutôt que de laisser ImageResizer la gérer. Logique.Plugin de cache de disque avec Sitecore

J'ai mis en place un pipeline personnalisé dans Sitecore qui fonctionne vraiment bien cependant:

var settings = new ResizeSettings(HttpContext.Current.Request.QueryString); 
ImageBuilder.Current.Build(args.OutputStream.Stream, stream, settings); 
args.OutputStream = new MediaStream(stream, args.MediaData.Extension, args.MediaData.MediaItem); 

Il repartira ensuite l'image redimensionnée au client avec succès. Cependant, je n'ai aucune idée de la façon d'activer le cache disque pour ne pas avoir à traiter chaque requête de resizer à la demande, et je n'ai pas trouvé de ressources pour ce problème.

Y a-t-il quelque chose que je peux faire pour éviter mon pipeline personnalisé et activer ImageResizer natif afin que je puisse utiliser le plugin DiskCache avec mon scénario (Sitecore Media)? Ou y a-t-il un moyen de modifier mon pipeline pour utiliser la classe DiskCache afin d'installer le mien?

Merci! Pourquoi voulez-vous utiliser votre propre imageresizer?

Répondre

1

Bien sûr, cela serait possible, mais savez-vous que le mediahandler Sitecore que vous utilisez déjà peut redimensionner les images téléchargées originales en ajoutant des paramètres de chaîne de requête? Cela résout votre question de mise en cache et vous n'avez pas besoin de créer votre propre plugin. Donc, je vous recommande vivement d'utiliser la fonctionnalité par défaut du sitecore, car sitecore conservera automatiquement l'image redimensionnée sur le disque (en tant que cache disque, ce qui améliorera grandement les performances pour toute demande suivante de la même image avec le même paramètre) et sitecore recréera le cache si tous ces fichiers temp sont supprimés (par exemple avec une nouvelle installation/déploiement)

Vous pouvez redimensionner votre image en ajoutant simplement des paramètres à votre URL d'image. Ainsi, lorsque l'URL de votre image est /-/media/Images/FOLDER/IMAGENAME.jpg , vous pouvez définir la largeur en ajoutant un paramètre w.
/-/media/Images/FOLDER/IMAGENAME.jpg?w=150 Et la hauteur en ajoutant le paramètre h.

Ce sont les paramètres possibles:

  • w: largeur en pixels
  • h: hauteur en pixels
  • mw: largeur maximale en pixels
  • mh: hauteur maximale en pixels
  • la: Langue (par défaut à la langue de contexte)
  • vs: Version (par défaut à la dernière version)
  • db: Base de données (par défaut sur la base de données de contexte)
  • bc: couleur d'arrière-plan (par défaut noir)
  • que: Permettre tronçon (comme = 1)
  • sc: L'échelle de nombre à virgule flottante (sc =.25 = 25%)
  • THN: Vignette (THN = 1)
  • DMC: désactiver la mise en cache de support, à la fois la récupération et le stockage (SCV = 1)

Notez qu'il existe une chose à prendre en Compte. Avant de commencer à ajouter des valeurs querystring à vos images Medialibrary, vous devriez être sûr de trouver ce paramètre de configuration

      <setting name="Media.RequestProtection.Enabled" value="false"> 

La valeur par défaut est vrai, ce qui signifie que vous devez ajouter un hachage supplémentaire à la querystring de chaque image avant qu'il ne soit redimensionné. Le définir sur false vous permettra d'expérimenter avec l'imagerie et de vous familiariser avec lui, mais laisser ce paramètre à false n'est pas recommandé sur un environnement de production! Cela signifie que vous devrez éventuellement définir une valeur de hachage à chaque requête imagée pour les images dans lesquelles vous souhaitez utiliser les paramètres de redimensionnement. La façon dont vous pouvez faire cela est assez simple. Il suffit de passer l'URL de l'image, ensemble, tous ses paramètres de redimensionnement dans le code suivant: (. Ex compression de qualité)

var url = "/-/media/Images/FOLDER/IMAGENAME.jpg?w=150"; 
url = Sitecore.Resources.Media.HashingUtils.ProtectAssertUrl(url) 
+0

Il y a un certain nombre de caractéristiques de ImageResizer qui ne sont pas fournis à l'image de Sitecore fonctionnalité de redimensionnement. J'ai résolu mon problème en utilisant ImageResizer pour redimensionner l'image, mais en utilisant la fonctionnalité MediaCache de Sitecore pour mettre en cache le résultat par opposition au plugin DiskCache de ImageResizer. – kamojoe