如何使用Tridion2011中的自定义DAO在我的存储扩展中仅存储PDF类型的二进制文件

如何使用Tridion2011中的自定义DAO在我的存储扩展中仅存储PDF类型的二进制文件,tridion,tridion-2011,tridion-content-delivery,tridion-storage-extension,Tridion,Tridion 2011,Tridion Content Delivery,Tridion Storage Extension,我已经编写了自定义DAO,以在Tridion 2011的持久化存储扩展类型中为我的二进制文件添加/Update/Delete特定记录 下面是示例代码,我试图在自定义二进制DAO(JPABinaryDAOExtension)中使用自定义DAO类/接口(PublishActionDAO和PublishAction) 上面是添加的示例代码。当创建一个新的二进制文件并且更新和删除时,我将把操作存储为添加的二进制文件发布URL,它的TCMURI。我可以在上面的代码中轻松地获得这些数据。现在我面临的问题是,

我已经编写了自定义DAO,以在Tridion 2011的持久化存储扩展类型中为我的二进制文件添加/Update/Delete特定记录

下面是示例代码,我试图在自定义二进制DAO(
JPABinaryDAOExtension
)中使用自定义DAO类/接口(
PublishActionDAO
PublishAction

上面是添加的示例代码。当创建一个新的二进制文件并且更新和删除时,我将把操作存储为添加的二进制文件发布URL,它的TCMURI。我可以在上面的代码中轻松地获得这些数据。现在我面临的问题是,我只需要存储PDF类型的二进制文件的记录,而其他类型的二进制文件(如JPG/Word等)则不需要记录条目

编辑:是下面的解决方案将工作为我或使对象的二进制文件,这将降低性能

ItemDAO item = (ItemDAO) StorageManagerFactory.getDAO(binaryContent.getPublicationId(),StorageTypeMapping.BINARY_META);
BinaryMeta binarymeta = (BinaryMeta) item.findBinaryByPrimaryKey(binaryContent.getPublicationId(),binaryContent.getBinaryId());
binarymeta.getBinaryType();

通过验证
create
方法中
relativePath
的扩展名,可以严格检查类型:

    if (!relativePath.toLowerCase().endsWith(".pdf")) { return; }
但是,有一种更好的处理方法——在
cd\u storage\u conf.xml
中,使用特定扩展映射二进制类型。然后,CD存储框架将仅在扩展匹配时调用DAO:

    <Item typeMapping="Binary" itemExtension=".pdf" storageId="myStorage"/>


OK。现在我们有进展了(我会删除我以前的评论,因为它们已经过时了)。你有性能问题吗?你不可能找到比使用
FindBinaryPrimaryKey
更快的查找二进制文件的方法,如果你使用对象缓存(你应该这么做的话)更是如此。@谢谢frank,当我的解决方案投入实际发布时,我只是对性能感到好奇,上面的解决方案是最好的,还是我可以做更多的更改来获取二进制文件数据,还有一点我们有关于Tridion存储扩展的API参考吗classes@Mihai...thanks明天我将尝试同样的方法,并相应地更新答案。
    <Item typeMapping="Binary" itemExtension=".pdf" storageId="myStorage"/>