Sitecore的磁盘缓存插件

时间:2016-12-02 01:30:17

标签: imageresizer imageresizer-diskcache

我有一个新的Sitecore 8.1实例正在运行。 Sitecore通过媒体处理程序加载图片,网址如下:" / - / media / Images / FOLDER / IMAGENAME.jpg"。 Sitecore媒体处理程序需要运行,以便它可以在Sitecore数据库中找到图像,然后返回实际的图像文件(磁盘上不存在图像)。我从来没有能够让ImageResizer处理Sitecore图像,因为Sitecore会窃取请求,而不是让ImageResizer处理它。有道理。

我已经在Sitecore中实现了一个非常有效的自定义管道:

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);

然后,它会将已调整大小的图像成功返回给客户端。但是,我不知道如何启用磁盘缓存,因此它不必按需处理每个resizer请求,也没有找到任何资源来解决此问题。

我可以做些什么来避免我的自定义管道并启用本机ImageResizer,以便我可以在我的场景(Sitecore Media)中使用DiskCache插件?或者有没有办法可以修改我的管道来使用DiskCache类来装配我自己的?

谢谢!

1 个答案:

答案 0 :(得分:1)

为什么要使用自己的imageresizer?

当然有可能,但您是否意识到您已经使用的Sitecore mediahandler还可以通过添加查询字符串参数来调整原始上传图像的大小?这解决了您的缓存问题,您无需构建自己的插件。

因此,我强烈建议您使用默认的sitecore功能,因为sitecore会自动将已调整大小的图像保留在磁盘上(作为磁盘缓存,这将大大提高同一图像的任何后续请求的性能)参数)和sitecore将重新创建缓存,如果所有这些临时文件都被删除(例如,使用新的安装/部署)

您只需在图片网址中添加参数即可调整图片大小。 所以当你的图像的URL是 /-/media/Images/FOLDER/IMAGENAME.jpg 您可以通过添加w参数来设置宽度 /-/media/Images/FOLDER/IMAGENAME.jpg?w=150 并通过添加h参数来设置高度。

这些是可能的参数:

  • w:宽度(以像素为单位)
  • h:像素高度
  • mw:最大宽度(以像素为单位)
  • mh:最大高度(以像素为单位)
  • la:语言(默认为上下文语言)
  • vs:版本(默认为最新版本)
  • db:数据库名称(默认为上下文数据库)
  • bc:背景颜色(默认为黑色)
  • as:允许拉伸(as = 1)
  • sc:按浮点数进行缩放(sc = .25 = 25%)
  • :缩略图(thn = 1)
  • dmc:禁用媒体缓存,包括检索和存储(dmc = 1)

请注意,还有一件事需要考虑。在开始向您的medialibrary图像添加查询字符串值之前,您应该确保找到此配置设置

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

默认值为true,这意味着您需要在调整每个图像的查询字符串之前添加额外的哈希值。将其设置为false将允许您尝试使用imageresizing并熟悉它,但不建议在生产环境中将此设置保留为false!这意味着您最终需要为要使用调整大小参数的图像的每个imagerequest设置哈希值。 你可以这样做很简单。只需将URL传递给图像,将以下代码中的所有调整大小参数:

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