我想通过仅使用 java 中的工作流程创建一个新文件夹来移动少量 Assets 。我不想手动创建文件夹然后移动 Assets ,因为有 10000 个 Assets 需要移动到不同的文件夹。
最佳答案
如果您正在考虑使用工作流程创建文件夹 - AEM 中的文件夹只不过是 jcr:primaryType
的节点,可以是 sling:Folder
或 sling:有序文件夹
。如果您的类路径中有 com.day.cq.commons.jcr
,则 createPath
method如果节点不存在,将帮助您创建节点。
您还可以使用 addNode方法,然后使用 javax.jcr.Node
api 的 setProperty 方法来创建此适当主要类型的文件夹。
将资源移动到这个新创建的节点(文件夹),之后就可以继续了。您可以使用克隆
method来自javax.jcr.WorkSpace
,它有一个删除现有节点的选项。
还有另一种直接的方式来转移 Assets 。
我建议您使用内置的 com.adobe.granite.asset.api.AssetManager
api对 DAM Assets 执行 CRUD 操作。
session = resourceResolver.adaptTo(Session.class);
String assetPath = "/content/dam/folderA/asset1.jpg";
String movePath = "/content/dam/folderB/asset1.jpg";
assetManager.moveAsset(assetPath, copyPath);
session.save()
session.logout()
AssetManager API 的更多引用。
如果没有适当的索引,移动大量 Assets 可能会导致移动操作失败。监视日志中是否有警告消息,例如查询读取或遍历了超过 X 个节点。
。您可能需要将基于 Oak 的属性添加到开箱即用的 /oak:index/ntBaseLucene
索引中才能解决此问题。
更多详情here .
关于java - AEM asset 有没有办法通过在java工作流中创建文件夹来移动文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51964751/