2014-11-04 64 views
4

我们制作了自定义图像裁剪器。sitecore:清除媒体缓存中的单个图像

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

任何想法,如果有可能清除单个项目从媒体缓存?

+0

传递不同的参数通常会导致媒体生成和缓存。如果您始终传递相同的参数,则出于性能原因,预计不会再次触发管道。你是说它不是这样工作的吗? – jammykam 2014-11-04 09:07:34

回答

0

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

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

Sitecore在缓存的图像旁边存储ini文件,它具有每个图像请求的片段并存储请求的查询字符串。底线,如果你的querystring是独特的,那么你应该击中管道。