Sitecore 8 では、Sitecore 7.5 から提供された Media Request Protection に引き続き対応しています。今回の記事ではプログラムを使用して Media Request Protectionに対応した画像のURLを生成する方法を記載します。
1. Media Requst Protectionの設定について
Media Request Protectionの有効無効の設定は、 Sitecore.Media.RequestProtection.config で定義されます。Media.RequestProtection.Enabledがtrue(既定でtrue)の場合にMedia Request Protectionの機能が有効になります。
<setting name="Media.RequestProtection.Enabled" value="true" />
2. Media Request Protectionの効果について
Media Request Protectionが有効な場合、適切なハッシュ値を持たないメディアアイテムへのURLを使用してメディアライブラリ上の画像を取得しようとすると、未加工(原寸サイズ)の画像ファイルが返されます。つまり、画像を加工するオプションが無視されます。実際その効果をサンプルプログラムで確認します。
3. Media Request Protectionに対応した画像のURLの生成
Media Request Protectionに対応したメディアライブラリで管理される画像ファイルを取得する方法に関しては、Sitecore 7.5のリリースノートに説明があります。そのため、.NETプログラムからMedia Request Protectionに対応したハッシュ付きのメディア画像のURLを生成するにはリリースノートに従ってコードを記述すればOKです。リリースノートの箇所を見つけられない場合は HashingUtils.ProtectAssetUrl でリリースノートのページを検索してみてください。
それでは早速サンプルプログラムを掲載します。MediaManager.GetMediaUrlを使用してメディア画像へのURLを生成した後、HashingUtils.ProtectAssetUrl メソッドの引数にそのURLを指定するだけでハッシュ付きのURLを生成できます。ハッシュの文字列だけ生成したい場合は、 HashingUtils.GetAssetUrlHash メソッドを使用できます。
// 画像を表すURLを生成する string mediaItemPath = "/sitecore/media library/Images/img/main-image"; // Media Library上のメディアアイテムを取得 Item item1 = Sitecore.Context.Database.GetItem(mediaItemPath); MediaItem media = new MediaItem(item1); // 画像加工オプションの設定 MediaUrlOptions mediaOptions = new MediaUrlOptions { MaxWidth = 200, Height=50 }; // 画像のURLを生成 string imageUrl = MediaManager.GetMediaUrl(media, mediaOptions); // 画像のURLにハッシュを付与 string imageUrlWithHash = HashingUtils.ProtectAssetUrl(imageUrl); // ハッシュの文字列のみを生成する場合 string hashOnly = HashingUtils.GetAssetUrlHash(imageUrl);
実際に生成したURLと画像の表示結果は次の通りです。上がhashパラメーターのない、画像加工オプション付きのURLで下がhashパラメータのある画像加工オプション付きのURLを使用したimgタグのレンダリング結果です。hashタグをつけないとサーバーサイドで画像を加工した画像が取得できていないことが分かります。
メディアリクエストプロテクションに対応したメディア画像へのURLを使用していない場合、サーバーサイドで画像の加工が行われないので、スタイルシートで画像のサイズを指定している場合はクライアントサイドで画像のリサイズが行われることになります。また、Sitecoreのコントロールを使用してImageフィールドをレンダリングしている場合は、メディアリクエストプロテクションに対応したURLが自動的に生成されています。
4.おまけ - プログラム以外の方法でメディアリクエストプロテクションに対応したURLを生成する
レイアウトやサブレイアウトから<img>タグを使用してメディアライブラリ上の画像アイテムのURLを静的に利用したり、CSSファイルなどで、メディアライブラリ上の画像を参照するする場合に、画像をサーバーサイドで加工するためにhashパラメーター付のURLを生成したい場合があります。そのような要求がある場合は CMS サーバーにの /sitecore/admin/MediaHash.aspx にアクセスしてメディアリクエストプロテクションに対応したURLを事前に生成できます。次のように画像をサーバーサイドで加工するためのクエリパラメーターを付与したURLをEnter media Urlセクションのテキストボックスに入力して、 Generate hash をクリックするだけです。 Result セクションにhashパラメーター付のURLが生成されます。
5.まとめ
簡単なサンプルですが、説明は以上です。
そのほか参考情報を記載しておきます。
メディアライブラリ上の画像を加工するクエリパラメーターについて
Media Options and Query String Parameters in the Sitecore ASP.NET CMS
http://www.sitecore.net/learn/blogs/technical-blogs/john-west-sitecore-blog/posts/2011/05/media-options-and-query-string-parameters-in-the-sitecore-aspnet-cms.aspx
また、プログラムからSitecore Itemのフィールドを操作する方法に関しては SDN の Content API Cookbook (コンテンツ API クックブック)が参考になります。例えば "4.1.7 Image フィールドへのアクセス方法" にメディアライブラリー上のメディアアイテムで管理される画像やファイルを取得するためのURLの生成方法が記載されています。
さんのコメント: さんのコメント: