我正在尝试使用以下代码读取已发布二进制文件的二进制数据:
Tridion.ContentDelivery.DynamicContent.BinaryFactory factory = new BinaryFactory();
BinaryData binaryData = factory.GetBinary(uri.ToString());
这很好,直到我将二进制文件存储在文件系统而不是代理数据库的环境中。现在,BinaryData始终为null,即使我确定该文件存在。
如果要像这样使用BinaryFactory,是否必须将二进制文件存储在数据库中?或者我错过了什么?
答案 0 :(得分:4)
我刚刚在我的SDL Tridion 2011 SP1 HR1环境中运行了一些测试,并且当我的二进制文件位于文件系统上时,可以确认填充了BinaryData
(即非空并包含值)。我使用了您的代码示例,并添加了在我的网站页面上使用的二进制文件的有效URI。我不确定我们的环境之间有什么不同,我唯一的想法是检查BinaryMeta
是否已部署到您的Broker数据库(尽管如果这有所不同,我认为这是一个错误)。
我的cd_storage.xml
节点的ItemTypes节点如下:
<ItemTypes defaultStorageId="defaultdb" cached="true">
<Item typeMapping="Binary" storageId="defaultFile" cached="true"/>
</ItemTypes>
因此除了二进制文件之外的所有内容都在数据库中。
我不确定您使用的是什么版本的SDL Tridion(我不知道它是否会对此产生影响),但我最近听说自2011 SP1起不再支持在文件系统上存储任何元数据。