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

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

有什么想法可以从媒体缓存中清除单个项目吗?

最佳答案

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

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

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

08-04 16:41