5

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

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

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

请让我们知道是否有任何解决方案可以在发布时将外部二进制内容附加到包中。

4

2 回答 2

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:文件信息类

于 2012-09-05T15:52:00.817 回答
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);

                } 
于 2012-09-06T07:20:45.447 回答