2012-09-05 61 views
5

當我們從tridion發佈某個頁面/動態組件時,可以在發佈時在當前執行/渲染包中添加一些外部多媒體文件/內容(例如:jpg圖像)因此最終的運輸包中包含此二進制文件以及原始發佈的內容? 這是使用tridion渲染器/解析器的定製方式嗎?如果是,請提供一些輸入。將外部多媒體文件推入tridion包發佈時間

* 注: *需要進行推入的二進制內容打包在發佈時不存在作爲的tridion多媒體組件,它位於的tridion CMS.Instead以外的其他文件的位置,我們有一些存根多媒體組件在正在發佈的組件/頁面中使用,它具有一些虛擬圖像。我們計劃在發佈(呈現/解析)時用原始圖像替換存根圖像。

由於我們有大量的二進制內容存儲在DAM工具中,我們不希望數據被重新創建爲tridion中的多媒體組件,因此我們希望通過查詢DAM工具來使用該數據並將其附加到tridion包中在一些映射數據庫中用於維持存根多媒體comp tcmid與原始內容之間的一對一映射的邏輯參考)。

請讓我們知道是否有任何解決方案在發佈時將外部二進制內容附加到包中。

回答

10

最好的 - 也是最簡單的方法 - 就是使用Tridion提供的開箱即用機制。創建一個新的多媒體組件,在資源類型下拉列表中選擇「外部」,然後輸入對象的URL。只要您可以通過網址解決問題,它就會按照您的要求工作(項目將被添加到包併發送到投遞服務器)。

如果這對您不夠好,那麼可以,您可以自己將它添加到包中。我過去這樣做的代碼有點像這樣:

FileInfo file = // Weird logic to get a FileInfo object from external system 
Item item = package.GetItem("My original Item"); 
item.SetAsStream(file.OpenRead()); 

這將我原始組件的內容替換爲我想要的實際文件。如果原始組件也是多媒體組件,這將適用於您。如果不是,只需使用您自己的名稱創建一個新項目等。如果可能,請使用開箱即用的過程。

PS:FileInfo Class

9

由於Nuno建議最好的方法是使用具有「外部」資源類型的多媒體組件。您可能不需要手動創建這些文件,您可以自動使用核心服務或API程序。

我之前在運行時創建zip文件時使用的另一種方法,並將以下代碼添加到包中。希望它可以幫助。

using (MemoryStream ms = new MemoryStream()) 
       { 
        zip.Save(ms); 
        downloadAllInOneURL = String.Format("ZipAsset{0}.zip", uniqueZipID); 
        downloadAllInOneURL = m_Engine.PublishingContext.RenderedItem.AddBinary(ms, downloadAllInOneURL, "", "application/zip").Url; 
        downloadAllInOneSize = getSize(ms.Length); 

       }