sitecore:清除媒体缓存中的单个图像

时间:2014-11-04 08:48:02

标签: c# .net caching sitecore sitecore7

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

这个想法是它将查询字符串保存在项目的字段中。 然后在渲染时我们将该查询字符串添加到图像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

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

1 个答案:

答案 0 :(得分:0)

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

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

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