2012-03-28 27 views
0

我想为名称(比如说A.gif)的图像创建单个文件节点。现在,我想跨多个节点重新使用该文件。有没有办法做到这一点? 作为解决方法,我正在为存储库中的不同路径重新创建文件节点,但这会导致文件重复。JCR创建单个文件,从不同节点链接

回答

0

我不知道我理解你的问题。但是,我要做的是将文件存储在一个位置,然后使用来自多个位置的path属性引用它。

假设你有以下节点结构

-content 
- articles 
    - article1 
    - article2 
- images 
    - image1 

您可以在每篇文章名为imagePath指向图像的路径属性显示的设置,在这种情况下/content/images/image1

+0

嗨罗伯特,这正是我想要做的..在单个位置存储文件,并从多个位置引用它。但是,我无法弄清楚如何从多个位置设置“路径”? – sfbay 2012-03-28 15:12:00

+0

查看我的更新。 – 2012-03-28 19:55:17

+0

感谢您的回复,罗伯特。感谢它 – sfbay 2012-03-30 18:00:23

1

如果您使用的是jackrabbit,如果DataStore处于活动状态,则复制文件节点(或者相当复制二进制属性)便宜。

该组件确保“大”二进制属性(具有可配置的大小阈值IIRC)仅基于其内容的摘要存储一次。

因此,您可以在这种情况下多次复制同一个文件节点,而无需担心磁盘空间。

+0

感谢您的回复,bertrand。欣赏它 – sfbay 2012-03-30 18:00:14

0

为了完整性,请不要忘记references

Node imageNode = rootNode.addNode("imageNode"); 
imageNode.addMixin(JcrConstants.MIX_REFERENCEABLE); 

Node node1 = rootNode.addNode("1"); 
node1.setProperty("image", imageNode); 

Node node2 = rootNode.addNode("2"); 
node2.setProperty("image", imageNode); 

session.save(); 

PropertyIterator references = imageNode.getReferences(); 
while (references.hasNext()) { 
    Property reference = references.nextProperty(); 
    System.out.println(reference.getPath()); 
} 
+0

注意引用David的模型认为是有害的(http://wiki.apache.org/jackrabbit/DavidsModel#Rule_.235:_References_considered_harmful) - 我个人同意这种看法,但是,意见当然不同。 – 2012-06-21 08:19:17

+0

我不使用引用:)只是提到了完整性。 – TedTrippin 2012-06-21 08:54:15

+0

好吧,让绝对有道理;-) – 2012-06-21 13:29:17