【问题标题】:sitecore: Clear single image from media cachesitecore:从媒体缓存中清除单个图像
【发布时间】:2014-12-31 02:14:45
【问题描述】:

我们制作了自定义图像裁剪器。

这个想法是将查询字符串保存在项目的字段中。 然后在渲染时,我们将该查询字符串添加到图像 url。

我们添加了一个 getMediaStream 管道。在这个管道中,我们使用 ImageProcessor 根据图像具有的查询字符串裁剪图像。

这一切都有效......一次。

一旦图像在媒体缓存中工作,我们就再也不会回到 getMediaStream 管道中了。因为当您重新裁剪时,您不会更改图像,而是更改查询字符串。

我们正在寻找一种方法,当我们保存新裁剪时,我们会从该图像中清除媒体缓存。 我们尝试了以下方法:

var mediaItem = new MediaItem(imageField.MediaItem);
var media = MediaManager.GetMedia(mediaItem);
var mediaOptions = new MediaOptions();
var mediaStream = MediaManager.Cache.GetStream(media, mediaOptions);

MediaStream cachedStream = null;
MediaManager.Cache.AddStream(media, mediaOptions, mediaStream, out cachedStream);

我们获取媒体缓存流并尝试将其设置为零,但这给了我们以下异常:Could not create the buffer file needed for stream sharing

是否可以从媒体缓存中清除单个项目?

【问题讨论】:

  • 传递不同的参数通常会导致媒体被生成和缓存。如果您始终传递相同的参数,则出于性能原因,预计不会再次访问管道。你是说它不是这样工作的吗?

标签: c# .net caching sitecore sitecore7


【解决方案1】:

我认为您不需要从缓存中删除单个项目。 Sitecore 为每个唯一请求在缓存中存储一​​张图像。如果您确实更新了用于请求图像的查询字符串,那么 Sitecore 应该再次调用 getmediastream 管道。

我的猜测是您的自定义查询字符串实际上并未作为请求的一部分传递。

Sitecore 在缓存图像旁边存储一个 ini 文件,每个图像请求都有一个部分,并存储请求的查询字符串。底线,如果您的查询字符串是唯一的,那么您应该点击管道。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-23
    • 1970-01-01
    相关资源
    最近更新 更多