Как найти размер узла jcr, включая его дочерние узлы?
Я использую Jackrabbit 2.8.0 и JCR 2.0, я разрабатываю проект для организации, чтобы ее пользователи могли хранить свои документы и каталоги в цифровом формате, используя свою учетную запись пользователя. Я хочу дать ограничение размера квоты для всех пользователей. Для отслеживания размера я пытаюсь получить размер любого узла JCR, включая его дочерние узлы. Любая помощь будет очень полезна. заранее спасибо
//jcr session after login to repository with user credentials
Session jcrsession = sessions.getSession();
Node root = jcrsession.getRootNode();
//added a file type node to root
file = root.addNode(fileName, Config.EDMS_DOCUMENT);
file.setProperty(Config.EDMS_SIZE, filesize);
InputStream isss= new ByteArrayInputStream(decodedBaseData);
Binary myBinary = valueFactory.createBinary(isss);
file.addMixin("mix:referenceable");
//added a node which will contain binary file
Node resNode = file.addNode(Config.EDMS_CONTENT,"edms:resource");
try {
//added binary data to node
resNode.setProperty("jcr:data",myBinary);
} catch (IOException e) {
e.printStackTrace();
}finally{
myBinary.dispose();
isss.close();
}
jcrsession.save();
это то, как я добавляю узлы типа документа, и теперь я хочу получить размер (в килобайтах) узла, который может иметь несколько дочерних узлов типа папок или файлов.
1 ответ
JCR Property.getLength()
Метод указан в [1], чтобы вернуть длину двоичного свойства в байтах, так что если у вас есть resNode
как указано выше, resNode.getProperty("jcr:data").getLength()
должен вернуть двоичный размер.
Затем вы можете ходить по дереву с Node.getNodes()
рекурсивно вычислить общий размер.
Обратите внимание, что getLength()
может вернуть -1, если реализация не может определить длину, поэтому вам придется проверить наличие возможных ограничений в используемой реализации JCR и реализации хранилища файлов.
[1] https://www.day.com/maven/jsr170/javadocs/jcr-2.0/javax/jcr/Property.html