Лично я бы постарался избежать структурирования вашей иерархии для включения типа файла.Это бы сработало, но кажется вынужденным и неестественным.
Вместо этого я бы разработал свою иерархию, которая будет наиболее естественной для вашего приложения (например, если у вас есть группы и пользователи, тогда, возможно, «группа / пользователь» ихранить документы пользователя в соответствующем пользовательском узле) и использовать свойства для захвата типа файла и дополнительных метаданных.
Если вы загрузите файл в JCR, используя соглашение «nt: file», каждый файл будет представленс узлом (названным в соответствии с именем файла) с типом "nt: file".Тогда этот узел будет содержать один дочерний узел с именем «jcr: content», и принято использовать тип узла «nt: resource» для этого дочернего узла.В JCR 2.0 тип узла «nt: resource» определяет следующие определения свойств:
- jcr: data (BINARY) обязательный
- jcr: lastModified (DATE) автоматически создается
- jcr: lastModifiedBy (STRING) создан автоматически
- jcr: mimeType (STRING) защищен?
- jcr: кодировка (STRING) защищена?
Обратите внимание, что реализации JCRразрешено рассматривать «jcr: mimeType» и «jcr: encoding» как защищенные, но ни Jackrabbit , ни ModeShape не делают этого (то есть вы можете и должны вручную установить эти свойства).
Вот фрагмент кода для загрузки файла и установки свойства «jcr: mimeType»:
// Get an input stream for the file ...
File file = ...
InputStream stream = new BufferedInputStream(new FileInputStream(file));
Node folder = session.getNode("/absolute/path/to/folder/node");
Node file = folder.addNode("Article.pdf","nt:file");
Node content = file.addNode("jcr:content","nt:resource");
Binary binary = session.getValueFactory().createBinary(stream);
content.setProperty("jcr:data",binary);
content.setProperty("jcr:mimeType","application/pdf");
Теперь из коробки «nt: file» и «nt:Ресурсные типы узлов не позволяют вам устанавливать свойства, которые они не определяют.Но вы можете использовать миксины, чтобы обойти это ограничение и хранить метаданные непосредственно на этих узлах.См. Мой подробный ответ , описывающий, как это сделать ранее другой вопрос .