2017-04-25 4 views
1

sitecore 8.1のサイズ変更イメージに問題があります。私は多くの記事をオンラインで見てきましたが、私が何をしているのかわからなかったのですが、私が心に留めていることは正しい方法ではないかもしれませんが、私がまだここに投稿しているものを推測してください。SItecore 8.1 MediaRequestHandlerでハッシュを使用したイメージのサイズ変更

私たちは本当にレイアウトを持っていないWebApiベースのプロジェクトを持っています.Jsonの要求と応答に基づいています。この

応答

"components": [ 
     { 
      "type": "background", 
      "parallax": 0, 
      "data": { 
      "type": "image", 
      "value": "-/media/images/pages/home/section-2.jpg" 
      } 
     }, 

のようになりますされ、このJSONレスポンスがキャッシュされてきているので、この段階でハッシュ化された画像を返すようにしたくありません。リターン画像SRCは、その時のシステムのイメージ要素に渡されたときに、デバイスの種類を検出し、クエリ文字列でそれを渡しますタイプに基づいて、この

"-/media/images/pages/home/section-2.jpg?type=mobile"

のようなものは、クエリ文字列で定義します。 sitecoreアイテムからサイズ変更イメージの幅と高さの値を読み込んでいます。このすべてが起こっている

public class MediaRequestHandler : Sitecore.Resources.Media.MediaRequestHandler 
    { 

    protected override bool DoProcessRequest(HttpContext context, MediaRequest request, 
       Sitecore.Resources.Media.Media media) 
      { 
//Load sitecore item based on the type define in querystring 

    if (!string.IsNullOrEmpty(context.Request.QueryString["type"])) 
       { 

var mediaItemHashedUrl = Sitecore.Resources.Media.HashingUtils.ProtectAssetUrl(
          Sitecore.Resources.Media.MediaManager.GetMediaUrl(
           media.MediaData.MediaItem, 
           new MediaUrlOptions() 
           { 
            Language = Context.Language, 
            Width = 100, // Width val would be coming from siteore item 
            Height = 75 // Height val is also coming from siteore item 
           })); 

        } 

       } 
    return base.DoProcessRequest(context, request, media); 
    } 

以下& DoProcessRequest方法のサンプルが今の質問はどのように私は、追加の要求を渡すと、このハッシュ化された画像を読み込むことができているMediaRequestHandlerクラスですか?

ご協力いただければ幸いです。

+0

カスタムmediarequesthandlerを使用せず、代わりにメディアハッシュを含むモバイルイメージURLを含めるようにJSONレスポンスをカスタマイズすることはできますか?その後、デバイスがモバイルとして検出された場合は、代わりにそのURLを使用できますか? – Jeroen

+0

私は恐れていますが、このJSONレスポンスはキャッシュされているので、ハッシュされたイメージURLを返すことは望ましくありません。私たちにはかなりの種類のデバイスがあります –

答えて

0

request.optionsに次のように高さと幅を渡すことができます。私はこれを自分で試していない。しかし、これはうまくいくはずです。

public class MediaRequestHandler : Sitecore.Resources.Media.MediaRequestHandler 
{ 
    protected override bool DoProcessRequest(HttpContext context, Sitecore.Resources.Media.MediaRequest request, 
       Sitecore.Resources.Media.Media media) 
    {  
     if (!string.IsNullOrEmpty(context.Request.QueryString["type"])) 
     { 
      request.Options.Height = 120;//desired height here 
      request.Options.Width = 180;//desired width here 
     } 

     return base.DoProcessRequest(context, request, media); 
    } 
} 
関連する問題