0

我有一个新的 Sitecore 8.1 实例正在运行。Sitecore 通过带有如下 URL 的媒体处理程序加载图像:“/-/media/Images/FOLDER/IMAGENAME.jpg”。Sitecore Media Handler 需要运行才能在 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);

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

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

谢谢!

4

1 回答 1

1

为什么要使用自己的 imageresizer?

当然可以,但是您是否知道您已经使用的 Sitecore 媒体处理程序也可以通过添加查询字符串参数来调整原始上传图像的大小?这解决了您的缓存问题,您无需构建自己的插件。

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

您只需将参数添加到图像 url 即可调整图像大小。因此,当您的图像的 URL 是 /-/media/Images/FOLDER/IMAGENAME.jpg 您可以通过添加 aw 参数来设置宽度。
/-/media/Images/FOLDER/IMAGENAME.jpg?w=150 和高度通过添加 h 参数。

这些是可能的参数:

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

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

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

默认值为 true,这意味着您需要在每个图像的查询字符串中添加一个额外的哈希值,然后才能调整它的大小。将其设置为 false 将允许您尝试调整图像大小并熟悉它,但不建议在生产环境中将此设置为 false!这意味着您最终需要在每个图像请求上为要使用调整大小参数的图像设置一个哈希值。你可以做到这一点的方法很简单。只需将 URL 一起传递给图像,它的所有调整大小参数都会在以下代码中:

var url = "/-/media/Images/FOLDER/IMAGENAME.jpg?w=150";
url = Sitecore.Resources.Media.HashingUtils.ProtectAssertUrl(url)
于 2016-12-15T20:39:57.350 回答