【问题标题】:Disk Cache plugin with Sitecore带有 Sitecore 的磁盘缓存插件
【发布时间】:2017-04-16 20:11:28
【问题描述】:

我有一个新的 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 类来安装我自己的?

谢谢!

【问题讨论】:

    标签: imageresizer imageresizer-diskcache


    【解决方案1】:

    为什么要使用自己的图像调整器?

    当然可以,但是您是否知道您已经使用的 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:缩略图 (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)
    

    【讨论】:

    • ImageResizer 的许多功能在 Sitecore 的图像大小调整功能中未提供(例如质量压缩)。我最终通过使用 ImageResizer 调整图像大小来解决我的问题,但使用 Sitecore 的 MediaCache 功能来缓存结果,而不是 ImageResizer 的 DiskCache 插件。
    猜你喜欢
    • 2016-09-07
    • 2013-04-27
    • 2018-02-10
    • 1970-01-01
    • 2015-10-01
    • 2015-05-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多