将外部多媒体文件推送到tridion发布时打包

时间:2012-09-05 15:42:22

标签: tridion tridion-2011 tridion-content-delivery

当我们从tridion发布一些页面/动态组件时,可以在发布时将一些外部多媒体文件/内容(例如:jpg图像)添加到当前执行/渲染包中。所以最终的传输包具有这个二进制文件与原始发布的内容一起出现? 是否可以使用tridion渲染器/解析器的自定义?如果是,请提供一些输入。

* 注意: *需要在发布时推送到包中的二进制内容不作为多媒体组件存在于tridion中,它位于tridion CMS之外的其他文件位置。而不是我们在已发布的组件/页面中使用了一些存根多媒体组件,其具有一些虚拟图像。我们计划在发布(渲染/解析)时将原始图像替换为存根图像。

由于我们在DAM工具中存储了大量二进制内容,因此我们不希望将数据重新创建为tridion中的多媒体组件,我们希望通过查询DAM工具并将其附加到具有某些逻辑的tridion包中来使用该数据referenceplanning维护stub多媒体comp tcmid与某些映射DB中的原始内容之间的一对一映射,以供参考)。

如果有任何解决方案可以在发布时将外部二进制内容附加到包中,请告诉我们。

2 个答案:

答案 0 :(得分:10)

最好也是最简单的方法是使用Tridion为开箱即用提供的机制。创建一个新的多媒体组件,在资源类型下拉列表中选择“外部”,然后键入该对象的URL。只要您可以使用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

答案 1 :(得分: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);

                }