我们制作了一个自定义的图像裁剪器。
其思想是将查询字符串保存在项的字段中。然后在渲染时,我们将该查询字符串添加到图像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文件,每个图像请求都有一个部分,并存储请求的查询字符串。最重要的是,如果查询字符串是唯一的,那么您应该进入管道。