2012-03-28 28 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