2014-11-04 55 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是獨特的,那麼你應該擊中管道。